新建项目准备

64 阅读1分钟

1 封装访问数据库、修改数据库相关配置

module.exports = {
  query: function (sql, callback) {
    const mysql = require('mysql');
    const conn = mysql.createConnection({
      host     : 'localhost',   // 你要连接的数据库服务器的地址
      user     : 'root',        // 连接数据库服务器需要的用户名
      password : 'l-ddui',        // 连接数据库服务器需要的密码
      database : 'l-ddui'      //你要连接的数据库的名字
    });
    conn.connect();
    // 完成增删改查
    conn.query(sql, callback);
    // 手动关闭连接
    conn.end();
  }
}

2 启用服务器

const express = require("express")
const server = express()

server.listen(10086, () => {
  console.log("您的服务器已经在10086 端口就绪了");
})

3 cors 跨域设置

const cors = require('cors')
server.use(cors())

4 静态资源设置

server.use('/uploads',express.static('uploads'))  //将uploads 文件夹中的静态资源进行托管

5 jwt 生成token

// 用户登录成功时生成 token
const tokenStr = jwt.sign({ name: username }, 'l-ddui', { expiresIn: 2 * 60 * 60 })
const token = 'Bearer ' + tokenStr
// 返回token供用户存储在本地
res.json({ "status": 0, "message": "登录成功!", token })

7 token 有效性检验

const jwt = require('express-jwt');
// app.use(jwt().unless());
// jwt() 用于解析token,并将 token 中保存的数据 赋值给 req.user
// unless() 约定某个接口不需要身份认证
server.use(jwt({
  secret: 'l-ddui', // 生成token时的 钥匙,必须统一
  algorithms: ['HS256'] // 必填,加密算法,无需了解
}).unless({
  path: ['/user/login', '/user/register', /^\/uploads\/.*/] // 除了这两个接口和静态资源、其他都需要认证
}));

8 错误中间件处理

server.use((err, req, res, next) => {
  console.log('有错误', err)
  if (err.name === 'UnauthorizedError') {
    res.status(401).send({ code: 1, message: '身份认证失败!' });
  }
});

9 注册路由

const userRouter = require('./router/user_router.js')
server.use('/hero', heroRouter)