1.1-学习环境

Node.js : 0.10.32

Express : 4.10.2

MongoDB : 2.6.1

Nodemon:   2.0.19

1.2-快速开始

安装 Express

express 是 Node.js 上最流行的 Web 开发框架,正如他的名字一样,使用它我们可以快速的开发一个 Web 应用。我们用 express 来搭建我们的博客,打开命令行,输入:

$ npm install -g express-generator

安装 express 命令行工具,使用它我们可以初始化一个 express 项目。

新建一个工程

注: 我们也可自己手动搭建工程目录!

在命令行中输入:

$ express -e blog
$ cd blog && npm install

初始化一个 express 项目并安装所需模块!

配置安装相关模块 

注: 看需求配置相应模块

npm install cors
npm install mongoose
nmp install nodemon 

{
  "dependencies": {
    "cors": "^2.8.5",
    "express": "^4.18.1",
    "mongoose": "^6.4.5",
    "nodemon": "^2.0.19"
  }
}

然后运行: 将项目启动 

 nodemon app.js

使用数据库

MongoDB简介

MongoDB 是一个基于分布式文件存储的 NoSQL(非关系型数据库)的一种,由 C++ 语言编写,旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。MongoDB 支持的数据结构非常松散,是类似 json 的 bjson 格式,因此可以存储比较复杂的数据类型。MongoDB 最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。

MongoDB 没有关系型数据库中行和表的概念,不过有类似的文档和集合的概念。文档是 MongoDB 最基本的单位,每个文档都会以唯一的 _id 标识,文档的属性为 key/value 的键值对形式,文档内可以嵌套另一个文档,因此可以存储比较复杂的数据类型。集合是许多文档的总和,一个数据库可以有多个集合,一个集合可以有多个文档。

models/db.js

const mongoose = require("mongoose")
mongoose.connect( "mongodb://localhost:27017/clothing", (err) => {
    if (!err) {
        console.log("数据库连接成功!");
    }
})
module.exports = mongoose

models/model.js

const  mongoose  = require("./db")
// 模型类 
const Schema = mongoose.Schema

// 衣服型号模型 
const sizeTypeSchema = new Schema({ 
    title: String,
    sort : Number
})
// 衣服属性模型
const clotheSchema = new Schema({
    name : String,
    desc: String,
    sort: String,
    // 关联外键 
    size_id: {
        type: Schema.Types.ObjectId,
        ref: "sizeType"
    }
})

// 映射表关系 
const sizeModel = mongoose.model("sizeType", sizeTypeSchema)
const clotheModel = mongoose.model("clothe", clotheSchema)

module.exports = { sizeModel, clotheModel }

路由控制 

const express = require("express")
const router = express.Router()

const { sizeModel, clotheModel } = require("../models/model")

// 获取数据 
router.get("/clothe", async(req, res)=> {
    let keyWord = req.query.keyWord // 搜索关键字
    let clothes 
    if ( keyWord ) {
        // 正向查询数据
        clothes = await clotheModel.find({ "name":{ $regex: keyWord } }).populate("size_id") .exec()
    }else{
        clothes = await clotheModel.find({}).populate("size_id") .exec()
    }
  
    res.json({ data: clothes })
})

// 反向查询 
router.get("/size", async(req, res)=> {
        // 没有外键的模型对象去查询有外键的关联对象查找; 衣服型号 =>> 衣服型号对应的属性
    let data = await sizeModel.aggregate([
        {
            $lookup: {
                from: "clothes",         // 关联字段的表名
                localField: "_id",       // 关联字段
                foreignField: "size_id", // 外键关联的字段
                as: "clothe"             // 查询关联的表中数据的数组
            }
        }
    ])
      
    res.json({ data })
})

// 数据添加
router.post("/addCloth", async(req, res) =>{
    let result = await clotheModel.create( req.body )
    res.json({
        msg: "ok",
        code: "201", 
        result
    })
})

// 删除 
router.delete("/delCloth/:_id", async (req, res)=>{
    let _id = req.params._id
    await clotheModel.deleteOne({ _id })
    res.send({"code": 201, msg: "删除成功!"})
})

// 修改 
router.patch("/updateCloth/:_id", async(req, res) =>{
    let _id = req.params._id
    await clotheModel.updateOne({ _id }, req.body).exec()
    res.json({
        mag: "ok", 
        code: 201
    })
})

module.exports = router

入口文件

app.js 

const express = require("express")
const cors = require("cors")

// 引入路由对象 
const indexRouter = require('./routers/index')

const app = express()

// 跨域
app.use( cors() )

// post 接收参数 
app.use( express.urlencoded( { "extended": false } ) )
app.use( express.json() )

// 路由注册 
app.use( indexRouter )

app.listen(8000, ()=> {
    console.log( 'server runing node!')
})


Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐