node 环境
安装
查看是否安装成功
node -v
淘宝镜像
npm set registry https://registry.npm.taobao.org/
express
安装
npm install express --save
创建
express project (项目名称)
查看
cd project
npm i
npm start // 查看 http://localhost:3000/
目录
..
│ app.js
│ package.json
│
├─bin
│ www
│
├─public
│ ├─images
│ ├─javascripts
│ └─stylesheets
│ style.css
│
├─routes
│ index.js
│ users.js
│
└─views
error.jade
index.jade
layout.jade
app.json
{
"name": "project",
"version": "0.0.0",
"private": true,
"scripts": {
"start": "node ./bin/www"
},
"dependencies": {
// cookie解析
"cookie-parser": "~1.4.4",
// 调试
"debug": "~2.6.9",
"express": "~4.16.1",
// 根据传入的http状态码,生成对应的HTTP error
"http-errors": "~1.6.3",
// 模板引擎
"jade": "~1.11.0",
// 默认日志
"morgan": "~1.9.1"
}
}
根据需求删除不要的文件夹及依赖
// 依赖卸载
npm uninstall ****
加入 controllers 和 models 文件夹
在 routes 引入并使用 controllers
import { userLogin } from '../controllers/users.js';
var express = require('express');
var router = express.Router();
/* GET users listing. */
router.get('/login', userLogin);
module.exports = router;
创建 helps
├─helps
│ ├─db.js // 数据库
│ ├─res_json.js // 封装返回 res.json()
│ └─res_msg.js // 封装 res.json 返回的 code msg
支持 import
// 下载依赖
npm i babel-register babel-preset-env --save-dev
// 在./bin/www文件第一行加入
require('babel-register')({
presets: ['env']
});
登录
npm 地址
安装 request
npm i request
安装 pm2
pm2是一个进程管理工具,可以用它来管理你的node进程
npm install -g pm2
安装 jsonwebtoken express-jwt
// npm i --save-dev jsonwebtoken express-jwt
// config.js 设置 expiretime, secret
module.exports = {
"jwt_expiretime": 36000,
"jwt_secret": "sfsffewfssgs",
}
// 在 app.js 中设置
app.set('secret', config.jwt_secret)
app.set('secret_expiretime', config.jwt_expiretime);
// 生成token
var token = jwt.sign({
exp: Math.floor(Date.now() / 1000) + app.get('secret_expiretime'),
open_id
}, app.get('secret'));
// 解析
jwt.verify(token, app.get('secret'), async (err, decoded) => {
if(err) {
// 出错
} else {
// 成功
}
})
限制 api
// jwt中间件
app.use(function (req, res, next) {
if (
req.originalUrl.indexOf('/users/login') >= 0
) {
return next()
}
// console.log(req.token, 'no token')
// var token = req.token
// if (!token) {
// console.log('no token')
// }
// jwt.verify(token, app.get('secret'), async (err, decoded) => {
// if (err) {
// } else {
// }
// })
})
express-bearer-token
承载令牌中间件
如果找到令牌,它将存储在上 req.token
。
const bearerToken = require('express-bearer-token');
app.use(bearerToken());
前端 header 配置
header: {
'Authorization': 'Bearer ' + token
},
cors
npm i cors
var cors = require('cors');
app.options('*', cors());
app.use(cors());
mysql-pro mariadb
npm install mysql-pro
npm i mariadb
express-session
// npm install express-session
multer
npm install --save multer
router
.post('/', multer({
//设置文件存储路径
dest: 'public/uploads'
}).single('file'), function (req, res, next) {
if (req.file.length === 0) {
//判断一下文件是否存在,也可以在前端代码中进行判断。
res_fail(res, API_EMPTY_UPLOAD);
return
} else {
let file = req.file;
let fileInfo = {};
let newFile = Date.now() + "_" + file.filename + '.' + file.mimetype.replace('image/', '');
fs.renameSync('./public/uploads/' + file.filename, './public/uploads/' + newFile);
// 获取文件信息
fileInfo.mimetype = file.mimetype;
fileInfo.originalname = file.originalname;
fileInfo.size = file.size;
fileInfo.path = file.path;
// 设置响应类型及编码
// res.set({
// 'content-type': 'application/json; charset=utf-8'
// });
res.send(newFile);
}
});
二维码生成
npm install qr-image
router.get('/', function(req, res) {
var text = '***';
var img = qr.image(text,{size :10});
res.writeHead(200, {'Content-Type': 'image/png'});
img.pipe(res);
});
<image src="https://www.moozixiao.club/qrimage" mode="widthFix" ></image>
使用 async-await
// 下载
npm i babel-plugin-transform-runtime -D
// 创建配置 .babelrc
{
"plugins": [
"transform-runtime"
]
}
用户信息
一开始时,在考虑都拿到了 openid 和 session_key 了,那用户信息呢,怎么没有用户信息,之后了解到原来用户信息其实是在用户那边授权的时候,已经发了过来了,存在了 encryptedData 中,
而我们需要做的就是 解密,那怎么去解密呢,其实 官方文档 已经给我们提供了解密方式(官方地址),可以去下载,然后使用。
下载后的文件
..
│ tree.txt
│
├─c++
│ ├─lib
│ │ ├─include32
│ │ │
│ │ ├─include64
│ │ │
│ │ ├─lib32
│ │ │
│ │ └─lib64
│ │
│ └─src
│ Makefile
│ Sample.cpp
│ WXBizDataCrypt.cpp
│ WXBizDataCrypt.h
│
├─Node
│ demo.js
│ WXBizDataCrypt.js
│
├─PHP
│ demo.php
│ errorCode.php
│ wxBizDataCrypt.php
│
└─Python
demo.py
WXBizDataCrypt.py
Bug
app.get is not a function
解决方法:
// 把 module.exports=app 提前到 require('./routes/index') 前面
var app = express();
module.exports = app;
Cannot read property ‘code’ of undefined (req.body.code )
由于把 app.use(router); 放到 app.use(bodyParser.json()); 前面而导致的问题
解决方法:
把 app.use(router); 放到最后
res.json 返回 json 成了字符串
情况:
返回:
res.json({
code: 200,
url: newFile
});
返回数据为:
data: "{"code":200,"message":"success","data":{"url":"moo_1591752800721.jpeg"}}"
解决方法:
// 返回的data是字符串形式
// 前端则需要使用 JSON.parse 进行转换
let data = JSON.parse(res.data)
JSON.parse() [从一个字符串中解析出json对象]
JSON.stringify() [从一个对象中解析出字符串]