如何从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');
})