express与mongodb入门

190 阅读3分钟

学习node.js,首先应该从一个框架开始学起,比如express,入门之后再慢慢深挖里面的其他功能。

1. 安装

`npm i express --save  ` 

2. 使用

// 模块化引入express包
const express = require('express')

// 实例化
const app = express()

// 编写路由接口
app.get('/', function (req, res) {
    res.send({ page: 'home' })
})
app.get('/about', (req, res) => {
    res.send({ page: 'About us' })
})
app.get('/product', (req, res) => {
    res.send([
        {id: 1, title: 'Product A'},
        {id: 2, title: 'Product B'},
        {id: 3, title: 'Product C'},
    ])
})

// 启动 本地服务器4000 端口
app.listen(4000, () => {
    console.log('App listening on port 4000! Please visit http://localhost:4000');
})

node server.js 启动服务器,代码更改,需要退出重启 nodemon server.js 启动并监听服务器,若代码保存更改,服务器数据会自动更新

3. 静态文件托管

// 表示所有'public'文件夹中的静态文件可以被直接访问,默认是根路径,
// 如 http://localhost:4000/index.html (index.html位于public文件夹里)
app.use(express.static('public')) 

// 表示所有'public'文件夹中的静态文件必须要在url的/static路径下才能被访问
// http://localhost:4000/static/index.html
app.use('/static', express.static('public'))

4. 解决跨域请求cors问题

  1. npm i cors 安装包
  2. app.use(require('cors')()) 引入并使用,即可解决跨域
    1. require('cors')是一个函数,使用()直接执行它,require('cors')()返回的是一个express可以直接使用的中间件,用app.use()执行

5. MongoDB数据库的基本使用

  1. npm i mongoose 安装
  2. 使用
const mongoose = require('mongoose')
// 连接数据库
// mongoose.connect('url', {}) 第一个参数是一个数据库地址url,
mongoose.connect('mongodb://localhost:27017/express-test', { useNewUrlParser: true })
// 建立模型 mongoose.model() 第一个参数是模型名称,第二个是schema表结构,传递一个对象参数,定义该模型有哪些属性,属性属于什么数据类型
const Product = mongoose.model('Product', new mongoose.Schema({
    title: String
}))
// 插入数据,使用一次后可注释删掉(正常情况不会直接使用这个方法去插入数据)
Product.insertMany([
    {id: 1, title: 'Product A'},
    {id: 2, title: 'Product B'},
    {id: 3, title: 'Product C'},
])

// 请求数据,去mongodb查找数据属于异步操作
app.get('/products', async (req, res) => {
    res.send(await Product.find()) // 必须要使用异步的写法
})

6. MongoDB查询

  1. find()查询返回的是一个数组,里面可能包含一个或多个对象
  2. findById()查询返回的是一个对象
// 跳过
res.send(await Product.find().skip(1))
// 限制查询条数
res.send(await Product.find().limit(2))
// 限制查询条件
res.send(await Product.find().where({
	title: 'Product B'
}))

app.get('/products/:id', async (req,res) => {
    // req.params 表示客户端传过来的所有参数(params是req里的,表示客户端请求的参数)
    const data = await Product.findById(req.params.id)
    res.send(data) // 服务端发送数据
})

7. MongoDB新增产品和POST请求

# 表示定义变量
@uri = http://localhost:4000/ 
GET {{uri}}products
###
GET {{uri}}products/633ce419701668578fb68962
###
POST {{uri}}products
Content-Type: application/json  ###请求头

{
    "title": "Product E"
}
// 实例化
const app = express()

// 允许express处理客户端提交过来的JSON数据
app.use(express.json())

app.post('/products', async (req, res) => {
    const data = req.body
    const product = await Product.create(data)
    res.send(product)
})

8. MongoDB修改产品和PUT请求

# 修改
@uri = http://localhost:4000/ 
PUT {{uri}}products/633ceed2245afb6053dbc2a2
Content-Type: application/json

{
    "title": "Product E-1"
}
# 删除
###
DELETE {{uri}}products/633ceed2245afb6053dbc2a2
// 修改
app.put('/products/:id', async (req,res) => {
    const product = await Product.findById(req.params.id) // 异步
    product.title = req.body.title
    await product.save() // 异步
    res.send(product)
})

// 删除
app.delete('/products/:id', async (req, res) => {
    const product = await Product.findById(req.params.id)
    await product.remove()
    res.send({
        success: true
    })
})

vscode插件推荐

  1. 【REST Client】

笔记来源

www.bilibili.com/video/BV1fb…