Nodejs+Express+MongoDB重构若依管理系统后端框架(一)

本文介绍了使用Node.js、Express和MongoDB重构若依管理系统的后端框架,从环境搭建、项目初始化、数据库连接到接口开发的详细步骤。通过实例展示了登录接口的实现,涉及mongoose模型创建、密码加密、JWT token的生成等技术。此外,推荐了学习资源和代码仓库。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Nodejs+Express+MongoDB重构若依管理系统后端框架

前言

这些知识通过B站全站之巅一位UP那学的,内容比较简单,仅仅是一些基础内容,方便大家更好的理解前后端的交互,如果有兴趣可以接着往后学。另外,全站之巅那有好多视频课,也提供了很多的学习资源。在这里感谢每一位乐意去分享知识的小伙伴,希望大家可以一起学习!

一、环境搭建

长话短说,必备环境Node.js,可取官网自行下载,当前我使用的版本为14.16.0。

需要安装MongoDB数据库,并启动MongoDB服务,这一点网上也有安装教程,有不明白的可以私信。

二、项目初始化

这里我们新建一个目录作为项目根目录,进入目录打开cmd,输入以下指令完成npm的初始化,用于记录我们项目中所用到的依赖;

npm init --y

接下来安装我们开发的核心工具:express和mongoose(可查官方文档,我们可以使用mongoose提供的api,帮助我们简化操作mongodb数据库的操作);

npm install express@next mongoose --save

安装完成之后新建一个server.js作为项目的入口文件即可。

// 引入express
const express = require('express')
// 创建app
const app = express()

// 静态托管public文件夹,在public下创建一个index.html文件,启动服务时访问http://localhost:8084可以看到页面
app.use('/', express.static('public'))
// 允许express处理json格式数据,否则将不能处理前端传来的json数据
app.use(express.json())

app.listen(8084, () => {
    // http://localhost:8084
    console.log(`8084 has been already started ...`);
})

另外,可以安装nodemon工具,可以使服务器进行热更新。如果使用

node server.js

启动服务器的话,修改后则需重新启动。全局安装nodemon工具如下:

npm install nodemon -g

修改package.json下的scripts,可以使用npm start启动服务器。

"scripts": {
    "start": "nodemon server.js"
}

三、连接数据库

在根目录创建plugin/db.js文件,输入以下内容:

module.exports = app => {
    const mongoose = require('mongoose');
    // 在使用“FindAndDupDate()”和“FindAndDelete()”时,将useFindAndModify设置为false,否则会报错
    // server-database数据库名称,会自动创建
    mongoose.set('useFindAndModify', false);
    mongoose.connect('mongodb://127.0.0.1:27017/server-database', {
        useCreateIndex: true,		// 解决弃用警告
        useNewUrlParser: true,
        useUnifiedTopology: true,
    }, function (error) {
        if (error) {
            console.log("数据库连接失败")
        } else {
            console.log("数据库连接成功")
        }
    })
}

在入口文件server.js引入上面创建好的文件,再启动服务器,就能连接数据库了:

require('./plugins/db')(app)

四、接口开发

经过以上内容,服务器和数据库就已经创建好了,接下来就是开发后台接口,以登录更能为例。

4.1 数据库建表

根目录创建models/User.js,储存用户信息的字段,包括用户名、密码等字段,其他字段可以自行创建。另外,使用mongoose操作数据库添加数据时,会自动添加一个_id的字段,作为唯一标识使用,该字段不会重复。创建表的时候,命名遵循驼峰,首字母大写(个人规范)。

const mongoose = require('mongoose')

const schema = new mongoose.Schema({
    // 用户名
    userName: {
        type: String,
        required: true,
        unique: true
    },
    // 密码:加密处理,需安装bcrypt插件,数据库存储加密后的密码
    password: {
        type: String,
        select: false,
        set(val) {
            return require('bcrypt').hashSync(val, 10)
        }
    }
}, {
    // 定义时间戳,添加数据时会自动加入下面两个字段:createTime和updateTime
    timestamps: {
        createdAt: 'createTime',
        updatedAt: 'updateTime'
    }
})

module.exports = mongoose.model('User', schema)

4.2 登录api

根目录创建routes/login.js,以后所有的接口都在routes里面开发,不同模块可以创建不同的文件

module.exports = app => {

    const assert = require('http-assert')
    const jwt = require('jsonwebtoken')
    const User = require('../models/User')

    app.post('/login', async (req, res) => {
        const {userName, password} = req.body
        const user = await User.findOne({userName}).select('+password')
        assert(user, 422, '用户名或密码不正确,请重新输入。')
        const valid = require('bcrypt').compareSync(password, user.password)
        assert(valid, 422, '用户名或密码不正确,请重新输入。')

        const token = jwt.sign({
            id: user._id
        }, app.get('SECRET'))
        res.send({
            code: 200,
            message: '登录成功',
            token
        })
    })
}

大致介绍一下上面代码的逻辑:

第一步:解构出前端传过来的用户名、密码数据;

第二步:拿到用户名后在数据库中进行查找,如果不存在该用户,则登录失败;

第三步:第二步通过后,再校验密码,因为密码是加密的,所以要先解密后在进行对比,如果密码不正确,则登录失败;

第四步:通过上述校验之后,生成token作为认证信息,并返回前端。

细节补充:

①http-assert是一个插件,类似于if-else,不同的是,判断的内容如果为false,则会终止请求,并返回状态码和信息。

②jsonwebtoken是用来生成token的一个工具,使用之前也需要通过npm安装,具体api可以查询官方文档

③app.get(‘SECRET’)为拿到生成token的秘钥,这个秘钥一般是保密的,不会让别人看到的,这里就放在入口文件里,可以使任意内容的字符串:

app.set('SECRET', 'SERVER_DATABASE_2021_0927')

接口写完之后,需要在入口文件里引入

app.require('./routes/login')

结尾

上述内容比较简单,先简单介绍一下,后面会做的更模块化和工程化一些。有不懂的知识可以私信我~

前端代码仓库:https://gitee.com/likeaskingwhy/base-vue-project.git

后端代码仓库:https://gitee.com/likeaskingwhy/base-server-project.git

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值