如何从0开始,使用node编写一个接口,实现增删改查(CURD)

如何从0开始,使用node编写一个接口,实现增删改查

1、初始化准备工作

1、创建一个node项目

mkdir my-node-app
cd my-node-app
npm init -y

2、安装Express

使用 express框架编写增删改查(CURD)非常简单。很容易上手

npm install express

3、创建一个 express应用程序

创建一个新的 js 文件,比如 app.js 或者 server.js 都可以。在该文件中,导入 express 模块并创建一个 express 应用程序。

const express = require('express')
const app = express()

4、定义一个数据存储,用于存放信息

const students = []

5、启动 express 程序,并监听指定端口

访问express 创建的接口地址是 ip 本地的ip

app.listen(3000,()=>{
    // console.log('Server is running at http://localhost:3000')
    console.log('Server is running on port 3000');
})

2、开始定义路由处理CURD

1、实现get请求

获取存储的所有信息

// 获取所有学生信息
app.get('/students',(req,res) => {
    res.json(students)
})

//前端请求接口地址:
http://192.168.1.19:3000/students

2、实现get详情接口请求

res.status(400) 是这个请求响应返回的状态码

app.get('/students/:id',(req,res)=>{
    console.log(req.params)
    let student = null
    if(students.length){
        student = students.find((item) => item.id == req.params.id)
    }
    if(student){
        res.json(student)
    } else {
        res.status(400).json({
            message: '学生不存在'  
        })
    }
})

//前端请求接口地址:
http://192.168.1.19:3000/students/1

2、实现post请求

app.post('/students',(req,res) => {
    console.log('student',req.body)
    if(req && req.body){
        const student = req.body
        students.push(student)
        res.status(201).json({message: '添加成功'})
    }else {
        res.status(400).json({message: '添加失败'})
    }
    
})

//前端请求接口地址:
http://192.168.1.19:3000/students
但是会发现很多的问题
1、body拿不到请求参数

pm2 log 0 查看日志发现body拿到的是 undefined

日志:
0|app  | student undefined
0|app  | student undefined

响应 :
{
    "message": "添加失败"
}
2、解决方案(1)
const express = require('express')
const app = express()

//添加 解析json格式的表单数据
app.use(express.json()) 

结果是取到一个空对象

虽然不是undefined了,但是一个空对象也不对

日志:
0|app  | student {}

响应:
{
    "message": "添加成功"
}

因为需要 请求方在请求头 headers 添加属性

Content-Type:application/json;charset=utf-8

然后就可以啦

日志:
0|app  | student { userName: 'admin', password: '121212', id: '3' }

响应:
{
    "message": "添加成功"
}
2、解决方法(2)

后端解决方案

const express = require('express')

//导入 body-parser中间件解析表单数据
const bodyParser = require('body-parser')

const app = express()

// 解析json格式的表单数据
app.use(bodyParser.json())

再配合前端解决方案

Content-Type:application/json;charset=utf-8
Access-Control-Allow-Origin:*
Access-Control-Allow-Methods:PUT,POST,GET,DELETE
Access-Control-Allow-Private-Network:true

3、实现put更新请求

app.put('/students/:id', (req,res) => {
    const id = req.params.id
    if(id && req?.body.id){
        const index = students.findIndex((item) => item.id == id)
        if(index >= 0){
            students[index] = req.body
            res.status(200).json({message: '更新成功'})
        }else {
            res.status(400).json({message: '学生不存在'})
        }
    }else {
        req.status(400).json({message: 'id不能为空'})
    }
})


//前端请求接口地址:
http://192.168.1.19:3000/students

4、实现delete 删除请求

app.delete('/students/:id', (req, res) =>{
    const id = req.params.id
    const index = students.findIndex((item) => item.id == id)
    console.log('id',id,'index',index)
    if(index >= 0){
        students.splice(index,1)
        res.status(200).json({message: '删除成功'})
    }else {
        res.status(400).json({message: '学生不存在'})
    }
})

//前端请求接口地址:
http://192.168.1.19:3000/students

常用命令

启动和重启进程

pm2 start app.js|server.js //启动进程
pm2 restart 0 // 重启进程,因为是在已启动的基础重启,传id或者name就可以了

进程日志

pm2 log 0 //查看指定程序的日志
pm2 flush //清除所有日志

停止进程

pm2 stop id|name

删除进程

pm2 delete id|name

完整代码

const express = require('express')
const bodyParser = require('body-parser')

const app = express()


// 解析 url-encoded格式的表单数据
app.use(bodyParser.urlencoded({ extended: false }))


// 解析json格式的表单数据
app.use(bodyParser.json())

const students = []

app.get('/api/users', (req,res) => {
    res.json({
        "code": 200,
        "data": {
            "total": 12,
            "rows": []
        },
        "message": "获取渠道信息成功",
        "status": "Success"
    })
})

// 获取所有学生信息
app.get('/students',(req,res) => {
    res.json(students)
})

// 获取单个学生信息
app.get('/students/:id',(req,res)=>{
    console.log(req.params)
    let student = null
    if(students.length){
        student = students.find((item) => item.id == req.params.id)
    }
    if(student){
        res.json(student)
    } else {
        res.status(404).json({
            message: '学生不存在'  
        })
    }
})

// 添加信息
app.post('/students',(req,res) => {
    console.log('student',req.body)
    if(req && req.body){
        const student = req.body
        students.push(student)
        res.status(201).json({message: '添加成功'})
    }else {
        res.status(400).json({message: '添加失败'})
    }
    
})

// 更新信息
app.put('/students/:id', (req,res) => {
    const id = req.params.id
    console.log('id',id)
    console.log('bodyid',req?.body.id)
    if(id && req?.body.id){
        const index = students.findIndex((item) => item.id == id)
        if(index >= 0){
            students[index] = req.body
            res.status(200).json({message: '更新成功'})
        }else {
            res.status(400).json({message: '学生不存在'})
        }
    }else {
        req.status(400).json({message: 'id不能为空'})
    }
})


// 删除学生信息
app.delete('/students/:id', (req, res) =>{
    const id = req.params.id
    const index = students.findIndex((item) => item.id == id)
    console.log('id',id,'index',index)
    if(index >= 0){
        students.splice(index,1)
        res.status(200).json({message: '删除成功'})
    }else {
        res.status(400).json({message: '学生不存在'})
    }
})


app.listen(3000,()=>{
    // console.log('Server is running at http://localhost:3000')
    console.log('Server is running on port 3000');
})
  • 9
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值