思路:
- 导入node内置模块'express'
- 使用express(), 创建app实例(web服务器)
- app.listen启动服务器, 监听端口80
- 编写接口get请求/post请求
- 引入cors跨域中间件, 全局注册
- 创建项目文件夹project, 新建service.js入口文件(用于启动服务也是接口的入口).引入express并创建app实例,启动一个服务器:
// 导入 express const express = require('express') // 创建服务器的实例对象 const app = express() // 启动服务器 app.listen(80, () => { console.log('api server running at http://127.0.0.1:8089') })
执行node .\service.js, 可以看到打印内容, 服务启动成功
- 引入express内置路由模块router, 定义接口地址.当进入路由接口后,使用send返回成功信息,定义好接口后使用use将router中间件挂载到app上。
// 导入 express const express = require('express') // 创建服务器的实例对象 const app = express() const router = express.Router() //定义路由模块 router.get('/get', (req,res)=>{ res.send({ code:1, msg:"GET请求成功", date: body }) }) router.post('/post', (req, res) => { const body = req.body res.send({ code:1, msg:"POST请求成功", date: body }) }) app.use(router) // 启动服务器 app.listen(80, () => { console.log('api server running at http://127.0.0.1:8089') })
访问地址:http://127.0.0.1:80/get 能看到返回结果. 但当我们在其他地址访问接口时, 会发现接口报跨域, 这时就需要用到cors模块
-
导入cors跨域中间件, 并全局注册
//导入cors跨域中间件 const cors = require("cors") // 全局注册,加前缀 app.use(cors())
到此我们配置的接口就能正常访问了, 但是后面发现, 若是post请求, 接口无法接收到客户端请求的数据. 这里尝试引入了body-parser模块
- 通过
npm install body-parser
命令安装模块后,可以通过以下方式获取模块引用:const bodyParser = require('body-parser') //创建 application/x-www-form-urlencoded 解析 app.use(bodyParser.urlencoded({ extended: false })) //解析 JSON格式 app.use(bodyParser.json())
body-parser也能够解析二进制格式,、文本格式, 这里就不一一赘述了
- 到此一个简单的node服务我们启动成功了, 下面记录一下具体代码, 以备后续用到.
目录:
service.js:
// 导入express
const express = require('express')
// 创建web服务器
const app = express()
const bodyParser = require('body-parser')
// 启动文本服务器
app.listen(5000, () => {
console.log("80服务器启动http://127.0.0.1/")
})
//配置解析表单数据的中间件
app.use(express.urlencoded({
extended: false
}))
//导入cors跨域中间件
const cors = require("cors")
// 全局注册,加前缀
app.use(cors())
app.use(bodyParser.urlencoded({ extended: false }))
app.use(bodyParser.json())
// 导入路由模块
const router = require('./app')
// 全局注册,加前缀
app.use('/api', router)
app.js
// 导入express
const express = require('express')
const fs = require('fs')
// 创建路由对象
const router = express.Router()
// 编写接口
router.get('/getData', (req, res) => {
fs.readFile('data.json', 'utf-8', (err, data)=>{
if (err) {
console.log('读取文件时发生错误!')
}
const json = JSON.parse(data)
console.log(json)
// 2.调用res.send()方法,把数据返回给客户端
res.send({
code: 1,
msg:"请求成功!",
data: json
})
})
})
router.post('/postData', (req, res) => {
// 1.获取客户端通过查询字符串,发送到服务器的数据
const body = req.body
let backData = []
// backData.push
// 增量写入
fs.readFile('./data.json', 'utf8', (err, info)=>{
if (err) console.log('文件读取失败!' + err.message)
let backData = [...JSON.parse(info)]
console.log('文件读取成功!')
if (body && body.url) {
if (backData && backData.length > 0) {
let index = backData.findIndex((item)=>item.url == body.url)
console.log(index, '------------------------------')
if (index >= 0) {
backData[index] = body
}else {
backData.push(body)
}
}else {
backData.push(body)
}
}
fs.writeFileSync('./data.json', JSON.stringify(backData), 'utf8');
console.log('文件写入成功', body.url);
})
// 2.调用res.send()方法,把数据返回给客户端
res.send({
code:1,
msg:"POST请求成功111111111111",
date: backData
})
})
//向外共享路由对象
module.exports = router
由于没有连接数据库, 这里用到了fs模块 用于读写文件, 将需要保存的数据存到json文件中