## 架构:expressjs + express-jwt + sequelize + express-validate
## 数据库:mysql
## 实现功能:登录、验证码、鉴权、用户、上传、下载、错误统一处理
## api格式: restful + json
项目目录
app.js
// var createError = require('http-errors');
var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
var logger = require('morgan');
var session = require("express-session");
var expressJwt = require('express-jwt');
var indexRouter = require('./routes/index');
var userRouter = require('./routes/user');
var uploadRouter = require('./routes/upload');
var app = express();
// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');
app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
app.use('/public',express.static('public'));
app.use(expressJwt({
secret: 'secret12345', // 签名的密钥 或 PublicKey
algorithms: ['HS256'],
}).unless({
path: ['/api/user/login', '/api/user/captcha'] // 指定路径不经过 Token 解析
}))
app.use(session({
secret: 'keyboard cat',
resave: true,
saveUninitialized: true
}))
app.use('/', indexRouter);
app.use('/api/user', userRouter);
app.use('/api/upload', uploadRouter);
// catch 404 and forward to error handler
app.use(function(req, res, next) {
console.log(res.status)
res.json({
msg: 'Not Found',
status: 404,
data: {}
})
});
// error handler
app.use(function(err, req, res, next) {
// set locals, only providing error in development
res.locals.message = err.message;
res.locals.error = req.app.get('env') === 'development' ? err : {};
res.json({
msg: err.message,
status: err.status || 500,
data: {}
})
});
module.exports = app;
model->role.js
var db = require('../utils/db');
var {DataTypes} = require('sequelize');
var Role = db.define('role', {
id: {
type: DataTypes.INTEGER,
allowNull: false,
primaryKey: true,
autoIncrement: true
},
name: {