【前端实践系列之五】Express+MongoDB后台搭建保姆式教程

这是我参与更文挑战的第5天,活动详情查看: 更文挑战 !

?概论

太卷了太卷了,前端不会点后台知识都不好意思吹牛逼了。Nodejs诞生以来,前端侵入后端的能力越来越强,虽说JS搭建的后台应用在性能等方面会差那么一丢丢,但也不是不能用是吧?。

其实呢,学习Express+MongoDB的后台搭建并不是为了我们去干后端的活,去抢后端的饭碗。其真正意义在于可以使得自己在尝试一些需要服务端或者后端配合的新技术时,不至于那么被动。所以这篇文章完全就是保姆式教程,太过深奥的东西完全不会提及。因为师父领进门,修行靠个人嘛。

? express基础环境搭建

? 1. 全局安装express生成器
    npm install -g express-generator
复制代码
? 2. 创建express项目并安装依赖
    express 项目名称
    npm i
复制代码
? 3. 启动项目
    npm start
    //启动成功后,在浏览器中访问`http://loaclhost:3000(默认端口)`即可
复制代码
? 4. 更换启动命令及端口(非必需)
//打开根目录中的```app.js```文件,将```module.exports = app;```替换为如下代码:
app.listen(8000, () => console.log('8000 端口启动成功!'));


//之后启动项目需使用如下命令:
node app.js
//运行后出现,项目启动成功提示
复制代码

? 连接MongoDB数据库

? 1. 下载安装MongoDB

这一步无需多言。

? 2.在express项目内,下载mongoose依赖
    npm i mongoose
    //mongoose可以视作nodejs环境下一款操纵的MongoDB的工具
复制代码
? 3. 数据库配置

在项目根目录中新建dataBase.js文件,写入以下内容:

const mongoose = require("mongoose");

//定义数据库名
const dbName = "BlaDataBase";
//定义数据库路径端口
const path = "localhost:27017";

const dbUrl = `mongodb://${path}/${dbName}`;

//连接数据库
mongoose.connect(dbUrl, {
    useNewUrlParser: true,
    useUnifiedTopology: true
});

//连接成功时
mongoose.connection.once("open", () => {
    console.log(dbName + "数据库连接成功,端口27017");
});
//连接失败时
mongoose.connection.once("error", () => {
    console.log(dbName + "数据库连接失败!");
});
复制代码
? 4. express中引入数据库配置

项目入口文件 app.js中引入配置:

require("./dataBase")
复制代码

? 配置接口Models

? 1. 新建model.js文件,写入如下内容:
const { Schema, model } = require("mongoose");

//创建Schema实例对象,参数为字段名:字段值类型组成的对象

const ordersSchema = new Schema({
    userId:{
        type:Schema.Types.ObjectId,
        ref:"Users"
    },//关联Users集合的_id字段
    cars:[{
        type:Schema.Types.ObjectId,//关联_id字段
        ref:"Cars"//关联Users集合
    }],//关联Cars集合的_id字段并组成列表
    filed1:String//基本类型
	...
}, {
    versionKey: false//可以禁用默认生成的字段"__v"
})

//生成名为Orders的mode
/*
/model接收两个参数:
/第一个参数为对应集合名称的单数形式(mongoose会自动将其变为复数并匹配)
/第二个参数为Schema的名称
*/
const Orders = model("Order",ordersSchema)

//导出模型
module.exports.Orders = Orders;
复制代码

? 配置接口Router

? 1. 在项目入口文件app.js中引入路由文件,配置一级路径
...
//引入路由文件
const ordersRouter = require("./routes/orders");
...
//配置一级路径
//use方法接收两个参数:一级路径名称,二级路径配置文件
app.use("/orders", ordersRouter);
复制代码
? 2. 参照刚配置的路由文件地址,创建并配置路由文件:
//引入express及router
const express = require("express")
const router = express.Router()

//引入controllers中定义的接口方法
const {addOrder,getOrders} = require("../controllers/ordersCon")

//定义接口。router.请求类型(“二级路径”,接口方法名)
router.post("/addOrder",addOrder)
router.get("/getOrders",getOrders)

module.exports = router;
复制代码
? 3. 参照刚配置的接口文件地址,创建并配置接口文件:
//引入接口所需的对应模型
const { Orders } = require("../models/ordersModel");

...

//定义接口中间件函数
/*
/接口中间件函数接收三个参数:
/req:请求参数
/res:响应参数
/next:中间件函数
*/
async function getOrder(req, res,next) {
    const {_id} = req.query;//解构请求参数(get方法从query解构,post方法从body解构)
    
    const orders = await Orders.find({ _id });//在数据库中查询对应数据。find为mongoose方法

    if (orders.length == 0) {
    	//不符合条件时的响应
        res.send({
            status: 0,
            msg: "订单获取失败",
            details: "此订单不存在",
        });
    } else {
        const backendData = orders[0];
    	//符合条件时的响应
        res.send({
            status: 1,
            msg: "订单获取成功",
            backendData, 
        });
    }
}

//导出接口函数
module.exports = { addOrder, getOrders };

复制代码

? 结语

大家加油!

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享