node.js框架
npm i express-generator -g
express 文件名
package.json
{
"name": "min-serve",
"version": "0.0.0",
"private": true,
"scripts": {
"start": "node ./bin/www"
},
"dependencies": {
"cookie-parser": "~1.4.4",
"debug": "~2.6.9",
"express": "~4.16.1",
"http-errors": "~1.6.3",
"jade": "~1.11.0",
"mongoose": "^5.7.1",
"morgan": "~1.9.1",
"request": "^2.88.0"
}
}
bin/www
很多代码是框架自带的,注意点是https,两个证书文件(key/pem,协议https,默认是443,(但是防止端口问题,可以nginx做代理,我这里就是做代理)
#!/usr/bin/env node
/**
* Module dependencies.
*/
var app = require('../app');
var debug = require('debug')('min-serve:server');
var https = require('https');
const fs = require('fs');
const path = require('path');
/**
* Get port from environment and store in Express.
*/
let key = fs.readFileSync(path.join(__dirname, "../cert/a.key"));
let cert = fs.readFileSync(path.join(__dirname, "../cert/a.pem"));
let options = {
key : key,
cert : cert
};
var port = "4430"
app.set('port', port);
/**
* Create HTTP server.
*/
var server = https.createServer(options,app);
/**
* Listen on provided port, on all network interfaces.
*/
server.listen(port);
server.on('error', onError);
server.on('listening', onListening);
/**
* Normalize a port into a number, string, or false.
*/
function normalizePort(val) {
var port = parseInt(val, 10);
if (isNaN(port)) {
// named pipe
return val;
}
if (port >= 0) {
// port number
return port;
}
return false;
}
/**
* Event listener for HTTP server "error" event.
*/
function onError(error) {
if (error.syscall !== 'listen') {
throw error;
}
var bind = typeof port === 'string'
? 'Pipe ' + port
: 'Port ' + port;
// handle specific listen errors with friendly messages
switch (error.code) {
case 'EACCES':
console.error(bind + ' requires elevated privileges');
process.exit(1);
break;
case 'EADDRINUSE':
console.error(bind + ' is already in use');
process.exit(1);
break;
default:
throw error;
}
}
/**
* Event listener for HTTP server "listening" event.
*/
function onListening() {
var addr = server.address();
var bind = typeof addr === 'string'
? 'pipe ' + addr
: 'port ' + addr.port;
debug('Listening on ' + bind);
}
nginx.conf
listen 80 default_server;
listen 443;
listen [::]:80 default_server;
server_name www.xxxx.com;
ssl on;
ssl_certificate /etc/nginx/cert/a.pem;
ssl_certificate_key /etc/nginx/cert/a.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_prefer_server_ciphers on;
location / {
client_max_body_size 100m;
proxy_pass https://www.xxxx.com:4430;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
login.js
var express = require('express');
var request = require('request');
var router = express.Router();
const userModel = require('../models/user');
//用户注册接口
router.get('/login', function (req, res, next) {
const APPID = "xxxxxxxx"; //小程序appid
const SECRET = "xxxxxxxxxxxxxxxxxx"; //小程序密钥
const JSCODE = req.query.code; //微信登入生成 code
request(`https://api.weixin.qq.com/sns/jscode2session?appid=${APPID}&secret=${SECRET}&js_code=${JSCODE}&grant_type=authorization_code`,function(err,data,req){
if(!err){
res.send({data:data}) //这里做数据库存储
}else {
res.send({data:err})
}
})
})
module.exports = router;
微信开发者
onLoad: function () {
wx.login({
success(res) {
if (res.code) {
//发起网络请求
wx.request({
url: 'https://www.xxx.com/login',
data: {
code: res.code
},
success(res){
console.log(res,"res")
}
})
} else {
console.log('登录失败!' + res.errMsg)
}
}
})