Node服務下的微信小程式

RunTime發表於2018-05-06

Node服務下的微信小程式

寫在前面

本人自身就是一個乒乓球愛好者,但是由於工作之後,小夥伴都比較忙,沒有一定的時間相約打球,於是最近準備寫一個約乒乓球的小程式,然後寫後端的介面程式碼,資料庫的搭建,並專案部署到伺服器中去。

小程式碼

Node服務下的微信小程式

小程式的技術選型

  • 在小程式這一塊,也出現了好幾種方案,有微信官方到寫法,有參考vue寫法的wepy架子,也有美團出品,把vue編譯成小程式的mpvue,嘗試過wepy的寫法後,我最後還是使用了官方的寫法,然後加入了promise, async/await的寫法。
return new Promise((resolve, reject) => {
  obj.success = function (res) {
    resolve(res)
  }
  obj.fail = function (res) {
    reject(res)
  }
})

async onLoad (options) {
  const { data } = await GetActiveList()
  this.setData({
    activeList: data
  })
}
複製程式碼

Node 框架選型

  • 參考的方案有Hapi、Egg、Express、Koa, 目前採取的是阿里“企業級的開發方案”Egg作為後端的技術方案

資料庫

  • myqsl/moogdb

伺服器

  • 目前部署在阿里雲上

1. 安裝開發環境

基於node 8.9.4
$ npm install express-generator -g
$ express myapp
複製程式碼

2. 路由

var http = require('http');
var express = require('express');
const querystring = require('querystring');
var router = express.Router();
var request = require('../utils/request');

/**
 * 獲取活動列表
 * @param  {} '/api/getActiveList'
 * @param  {} function(req
 * @param  {} res
 * @param  {} next
 */
router.post('/api/getActiveList', function(req, res, next) {
  const postData = querystring.stringify(req.body);
  request.post(req, res, postData, '/app/mock/3317/getActiveList')
});
複製程式碼

3. 封裝請求

var http = require('http');

exports.post = function(req, res, data, path){
  const options = {
    hostname: 'rap2api.taobao.org',
    port: 80,
    path: path,
    method: 'POST',
    headers: {
      'Content-Type': 'application/x-www-form-urlencoded',
      'Content-Length': Buffer.byteLength(data)
    }
  };

  const proxyHttp = http.request(options, (response) => {
    console.log(`狀態碼: ${response.statusCode}`);
    console.log(`響應頭: ${JSON.stringify(response.headers)}`);
    response.setEncoding('utf8');
    response.on('data', (chunk) => {
      console.log(`響應主體: ${chunk}`);
    });
    response.pipe(res)
    response.on('end', () => {
      console.log('響應中已無資料。');
    });
  });

  proxyHttp.on('error', (e) => {
    console.error(`請求遇到問題: ${e.message}`);
  });
  
  // 寫入資料到請求主體
  proxyHttp.write(data);
  proxyHttp.end();
}
複製程式碼

守護者 PM2

1. 安裝pm2

$ npm install pm2 -g
複製程式碼

2. 啟動專案

$ pm2 start /bin/www

Start an app using all CPUs available + set a name :
$ pm2 start app.js -i 0 --name "api"
複製程式碼

3. 更多pm2 命令

$ pm2 -h
複製程式碼

目前專案進度

  • 後端的資料支撐來自阿里rap模擬資料,本人因為只是一個小前端,對資料庫的知識還需要補充,後續會把真實的資料接入到專案中。

專案地址

相關文章