node koa+mongoose

308 阅读1分钟

1、项目搭建

"scripts": {
   "start": "node app.js",
   "server": "nodemon app.js"
 }
 // npm run server时 保证项目的实时更新

2、app.js

`

const koa = require("koa");
const Router = require("koa-router");
const bodyParser = require("koa-bodyparser");
const mongoose = require("mongoose");
const passport = require("koa-passport");
const db = require("./config/keys").mongoURL;

// 实例化
const app = new koa();
const router = new Router();
app.use(bodyParser());

// 路由
router.get("/", async (ctx) => {
  ctx.body = { msg: "Hello Koa Interfaces!" };
});

// 连接
mongoose
  .connect(db, { useNewUrlParser: true, useUnifiedTopology: true })
  .then(() => {
    console.log("已连接1111");
  })
  .catch((err) => {
    console.log(err, "sssssss");
  });

// 引入users,js
const users = require("./routes/api/user");
const profile = require("./routes/api/profile");

// 配置路由地址
router.use("/api/users", users);
router.use("/api/profile", profile);

// 解析token
app.use(passport.initialize());
app.use(passport.session());

/// 回调到config  文件中  passport.js
require('./config/passport')(passport);

// 配置路由
app.use(router.routes()).use(router.allowedMethods());

const port = process.env.PORT || 10086;

app.listen(port, () => {
  console.log(`server started on ${port}`);
});

`

3、所用到的一系列插件

  1. mongoose
  1. passport-jwt
  • tooken解析
const { secretOrKey } = require("../config/keys");

const JwtStrategy = require("passport-jwt").Strategy;
const ExtractJwt = require("passport-jwt").ExtractJwt;
const opts = {};
opts.jwtFromRequest = ExtractJwt.fromAuthHeaderAsBearerToken();
opts.secretOrKey = secretOrKey;

const mongoose = require("mongoose");

// const User = mongoose.model('users');

module.exports = (passport) => {
  passport.use(
    new JwtStrategy(opts, async (jwt_payload, done) => {
      console.log(jwt_payload, "jwt_payload");
      console.log(User, "User");
      const user = await User.findById(jwt_payload.id);
      if (user) {
        return done(null, user);
      } else {
        return done(null, false);
      }
    })
  );
};
  1. koa-passport
  • 验证token是否有效
router.get(
  "/current",
  passport.authenticate("jwt", { session: false }),
  async (ctx) => {
    const { email, id, name, avatar } = ctx.state.user;
    ctx.body = { email, id, name, avatar };
  }
);
  1. koa-router
  • 划分接口路径(接口地址)
  1. bcrypt
  • 密码加密
const bcrypt = require("bcrypt");

const tools = {
  enbcrypt(password) {
    const salt = bcrypt.genSaltSync(10);
    const hash = bcrypt.hashSync(password, salt);
    return hash;
  },
};

module.exports = tools;
  1. jsonwebtoken
  • 生成token

 // expiresIn 过期时间 (s)
 
 const token = jwt.sign(payload, secretOrKey, { expiresIn: 3600 });

  1. koa-bodyparser
  1. validator
  • 数据验证
const Validator = require("validator");

module.exports = function validateLoginInput(data) {
  let errors = {};


  if (!Validator.isLength(data.password, { min: 6, max: 18 })) {
    errors.name = "password的长度不能小于6位且不能超过18位";
  }

  return {
    errors,
    isValid: isEmpty(errors),
  };
};
github项目地址:github.com/838216870/n…