前端渐渐趋向后端化,工程化,自动化开发,掌握一门后端语言成了咱们必备的不可少阶段,Node的出现让咱们可以搭建了简单运算的后台,实现全栈的开发,如今经过几个阶段来开发一套基于VUE开发的Node后台系统,区块式的记录一些干货。javascript
安装: npm install express
引用: const express = require("express");
复制代码
设置端口号前端
const app = express();
const port = process.env.PORT || 5000;
app.listen(port,()=>{
console.log(`Server running on port ${port}`);
})
复制代码
在控制台中运行node server.js
,便可以开出http://localhost:5000
的请求链接,那么咱们能够根据请求链接编写出第一个请求接口java
app.get("/",(req,res) => {
res.send("Hellow World!")
})
复制代码
因为每次保存都要从新执行命令,故咱们能够安装npm install nodemon -g
避免每次初始执行node
有了第一步的操做咱们已经可以成功访问到了一个自定义接口数据了,那么如今咱们须要根据数据库的数据执行咱们的接口,在Node中运用封装好的MongoDB
进行操做(此处若有不明白能够看下以前总结的推文)git
安装:npm install mongoose
引用: const MongoClient = require("mongodb").MongoClient;
复制代码
建立一个文件keys.js
咱们将数据库链接所有编写进去,方便后期直接调用github
module.exports = {
url: 'mongodb://localhost:27017',
dbName: 'restful-api-prod',
secretOrkey: 'secret' //token 调用
}
复制代码
在server.js
页面中进行引入进行链接mongodbweb
class Mongodb{
constructor(conf) { //class原型下的构造函数
//保存conf到构造的集合中
this.conf=conf //成员变量
//链接
this.client = new MongoClient(conf.url,{useNewUrlParser: true}) //建立客户端
this.client.connect( err => { //有自动重连的机制
if(err) {
throw err
}
console.log('链接数据库成功');
});
}
}
module.exports = new Mongodb(conf);
复制代码
建立users.js
,此处页面编写将会涉及到 登陆,注册,设置Token,密码加密,用户,邮箱是否存在判断,Token识别获取信息等。mongodb
引入router进行接口路由编写数据库
const express = require("express");
const router = express.Router(); //接口请求
// api/users/test
router.get("/test",(req,res) => {
res.json({msg:"login works"})
})
module.exports = router;
复制代码
建立的文件须要到server.js
中引用express
const users = require("./routes/api/users");
app.use("/api/users",users);
复制代码
Schema的数据模型建立
const mongoose = require('mongoose');
const Schema = mongoose.Schema;
// Create Schema
const UserSchema = new Schema({
name: {
type: String,
required: true
},
email: {
type: String,
required: true
},
password: {
type: String,
required: true
},
avatar: { //头像
type: String
},
identity: {
type: String,
required: true
},
date: {
type: Date,
default: Date.now
}
});
module.exports = User = mongoose.model('users', UserSchema);
复制代码
方便后期接口调试的须要安装下postman,接下来的请求是POST请求,也是相对get请求比较麻烦的一点,POST的请求须要安装第三方的模块
npm i body-parser
复制代码
在 server.js 中引用
const bodyParser = require("body-parser");
//使用body-parser中间件
app.use(bodyParser.urlencoded({extended:false})); //开启往post传送数据
app.use(bodyParser.json()); //让数据json化
复制代码
引入Schema建立的数据模型 若是引用了那么咱们能够根据模型直接 User.findOne 就能在数据库中查询,可是未知缘由,在执行时一直没进去,便接下来都使用了封装的Promise请求进行操做
router.post("/register",async(req,res) => {})
var userFind = mongoHelper.findOne("test",{email: req.body.email});
复制代码
const newUser = new User({
name: req.body.name,
email: req.body.email,
avatar,
password:req.body.password,
identity:req.body.identity
})
复制代码
密码加密操做安装(使用参考npm) npm install bcrypt -S
await mongoHelper.insertOne("test",newUser);
return res.status(200).json(newUser); //打印在控制台的数据
复制代码
安装:npm i gravatar
const avatar = gravatar.url(req.body.email, {s: '200', r: 'pg', d: 'mm'});
复制代码
router.post("/login",async(req,res) => {})
mongoHelper.findOne("test",{email}).then(user => {})
复制代码
安装 npm install jsonwebtoken
复制代码
在判断匹配密码成功后进行操做,此处须要注意到的是 token: "Bearer "+token
jwt.sign("规则","加密名字","过时时间","箭头函数")
const rule = {
id:user.id,
name:user.name,
avatar:user.avatar,
identity: user.identity,
};
jwt.sign(rule,keys.secretOrkey,{expiresIn: 3600},(err,token) => {
if(err) throw err;
res.json({
success: true,
token: "Bearer "+token
})
})
复制代码
安装 npm i passport-jwt passport
引用 const passport = require("passport"); //对请求进行身份验证
初始化 app.use(passport.initialize());
代码抽离模式 require("./config/passport")(passport); //传对象过去
router.get("/current","验证token",(req,res) => {
res.json(req.user);
})
复制代码
建立passport文件直接在这个页面操做再抛出,在passport-jwt官网中引用须要的数据
const JwtStrategy = require('passport-jwt').Strategy,
ExtractJwt = require('passport-jwt').ExtractJwt;
const mongoose = require("mongoose");
// const User = mongoose.model("users");
const keys =require("../config/keys");
const mongoHelper = require('../models/mongoHelper')
const opts = {}
opts.jwtFromRequest = ExtractJwt.fromAuthHeaderAsBearerToken();
opts.secretOrKey = keys.secretOrkey;
复制代码
//server
router.get("/current",passport.authenticate("jwt",{session:false}),(req,res) => {
res.json(req.user);
})
//passport.authenticate 验证token
复制代码
注册
代码已上传github,请给star,后续继续更新,多谢支持