引言
作为前端程序员,掌握前端技术是远远不够的,随着互联网技术的发展,前端程序员也要懂得一些后端知识,未来能够成为一名全栈工程师。
下面我们使用nodejs+mongodb数据库来实现登录,注册api接口
操作步骤
一、开启mongodb服务
打开文件夹到指定目录:D:\mongodb\bin(此路径作为参考)
在此路径下打开cmd窗口,并执行 mongod -- dbpath D: \mongodb \data,显示以下语句,则表示mongodb启动成功
二、如何创建node服务器
连接mongodb数据库,新建一个server文件夹作为服务器,为了规范代码,在文件夹建立如图所示文件夹
安装相关第三方模块
"express": "^4.18.1",
"express-jwt": "^7.7.5",
"jsonwebtoken": "^8.5.1",
"mongoose": "^6.6.0",
"nodemon": "^2.0.19"
db/index,js 连接数据库
// 连接数据库
var mongoose = require('mongoose');
mongoose.connect('mongodb://127.0.0.1:27017/blog',{useNewUrlParser:true,useUnifiedTopology:true})
//2.连接成功
mongoose.connection.on('connected',function(){
console.log('连接成功:','mongodb://127.0.0.1:27017/blog');
})
//3.连接失败
mongoose.connection.on('error',function(err){
console.log('连接错误:',err);
})
//4.断开连接
mongoose.connection.on('disconnection',function(){
console.log('断开连接');
})
module.exports = mongoose;
models/userModel.js 创建 user 模型
var mongoose = require('mongoose');
var userSchema = require('../schemas/userSchema');
//创建 user 模型 ( 需要使用 user 表结构 )
module.exports = mongoose.model('User', userSchema, 'users' );
router/user 创建子路由,用于编写api接口
var express = require('express');
var jwt = require('jsonwebtoken');
//创建express子路由
var router = express.Router();
//导入User模型对象, 用来处理用户的登陆
var userModel = require("../models/userModel")
//api接口,处理注册用户的请求
router.post('/register', (req, res) => {
//req 请求对象
console.log('req.body', req.body);
var { phone, pass } = req.body;
//查询用户是否存在
userModel.find({ phone }, (err, data) => {
if (data.length != 0) { //用户存在
res.send({ code: 400, msg: "用户已存在,注册失败!" });
} else { //用户不存在, 插入新用户到数据表中
userModel.insertMany({phone, pass}, (err) => {
if (!err) { //如果没有出错
res.send({ code: 200, msg: "注册成功!" });
}
})
}
})
})
//api接口,处理用户登陆的请求
router.get('/login', (req, res) => {
//req 请求对象 , 从 req.query 获取get参数
//res 响应对象 , 通过 res.send 发送数据到客户端(浏览器)
console.log('req.query', req.query);
var { phone, pass } = req.query;
//查询用户是否存在
userModel.find({phone,pass }, (err, data) => {
if (data.length == 1) { //用户存在,登陆成功
var token = jwt.sign({ phone }, 'nodejs', { algorithm: 'HS256', expiresIn: '1h' });
res.send({
code: 200,
msg: "登陆成功!",
token
});
} else { //用户不存在,登陆失败
res.send({ code: 400, msg: "登陆失败!" });
}
})
})
module.exports = router;
schemas/userSchema.js 用于创建表结构
var mongoose = require('mongoose');
//创建 user 表结构 并抛出
module.exports = mongoose.Schema({
phone: String,
pass: String
})
server node服务器的入口文件,也是启动服务的根文件
//1.引入express模块
var express = require('express');
var expressjwt = require('express-jwt').expressjwt
//连接mongodb数据库
require("./db/index.js")
//2.创建express实例对象
var app = express();
//处理post参数
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
//设置中间件 验证token的有效性
app.use(expressjwt({
secret: 'nodejs',
algorithms: ['HS256']
}).unless({
path: [ //接口白名单, 这里的接口时免除token验证的
'/api/user/login',
'/api/user/register'
]
}))
var userRouter = require('./router/user')
//应用 用户的 子路由
app.use( "/api/user", userRouter )
//3.监听端口
app.listen(4000, () => {
console.log('服务器运行在 http://localhost:4000');
});