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、所用到的一系列插件
- mongoose
- 数据库连接
- Mongoose 的Schema 及 mongoose.model('Schema', Schema);
- 地址:www.mongoosejs.net/docs/guide.…
- 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);
}
})
);
};
- 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 };
}
);
- koa-router
- 划分接口路径(接口地址)
- 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;
- jsonwebtoken
- 生成token
// expiresIn 过期时间 (s)
const token = jwt.sign(payload, secretOrKey, { expiresIn: 3600 });
- koa-bodyparser
- 来处理POST请求参数
- 地址:www.npmjs.com/package/koa…
- 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),
};
};