上篇文章我们介绍了利用express微服务搭建简单的后台服务器以及中间件
今天我们把模块化的思想注入,利用路由分别管理 / 暴露API接口与前端交互等等
我们先跑起来服务
let express = require('express') // 引入express
let app = express() // 相当于 http.createServer(app)
// 访问根路由
app.get('/',(req,res) => {
res.send('Hello World')
})
// 监听3000端口
let server = app.listen(3000, '127.0.0.1', () => {
let host = server.address().address // host域
let port = server.address().port // 端口号
console.log(`Server running at http://${host}:${port}`)
})
看到服务已经跑起来了,接下来我们写几个路由 分别是 /user | /news
let express = require('express') // 引入express
let app = express() // 相当于 http.createServer(app)
// 访问根路由
app.get('/',(req,res) => {
res.send('Hello World')
})
// user路由
app.get('/user',(req,res) => {
res.send('user')
})
// news路由
app.get('/news',(req,res) => {
res.send('news')
})
// 监听3000端口
let server = app.listen(3000, '127.0.0.1', () => {
let host = server.address().address // host域
let port = server.address().port // 端口号
console.log(`Server running at http://${host}:${port}`)
})
接下来我们访问 http://127.0.0.1:3000/user \ http://127.0.0.1:3000/news 发现都可以访问到了
路由的效果实现了,但是如果路由更多的话都写到一个文件里,很显然是不符合模块化开发,接下来我们利用express - Router()分别模块化
新建router文件夹,分别有user.js、news.js
/**
* user.js
* @description user路由
*/
let express = require('express')
let router = express.Router()
router.get('/', (req,res) => res.send('user')) // 访问user根路由
module.exports = router
/**
* news.js
* @description news路由
*/
let express = require('express')
let router = express.Router()
router.get('/', (req,res) => res.send('news')) // 访问news根路由
module.exports = router
接下来在index.js 引入 user.js 、news.js
let express = require('express') // 引入express
let app = express() // 相当于 http.createServer(app)
// 访问根路由
app.get('/',(req,res) => {
res.send('Hello World')
})
// 引入user.js
app.use('/user', require('./router/user'))
// 引入news,js
app.use('/news', require('./router/news'))
// 监听3000端口
let server = app.listen(3000, '127.0.0.1', () => {
let host = server.address().address // host域
let port = server.address().port // 端口号
console.log(`Server running at http://${host}:${port}`)
})
我们访问 http://127.0.0.1:3000/user 、 http://127.0.0.1:3000/news 可以看到OK了
接下来我们就写几个简单的接口供前端使用
先创建一个json文件,通过fs模块,读取文件内容,注意设置编码格式UTF8
user.json
[
{
"userId": 1,
"userName": "小张",
"des": "我是小张"
},
{
"userId": 2,
"userName": "小明",
"des": "我是小明"
}
]
user.js
let express = require('express')
let router = express.Router()
let fs = require('fs')
// 访问/user根目录
router.get('/', (req,res) => res.send('user'))
// 访问/user/getUserList
router.get('/getUserList', (req,res) => {
fs.readFile('user.json', 'UTF8', (err, data) => {
if (err) throw err
res.send(data)
})
})
我们通过客户端ajax发起请求
// 这里用到了axios库,因为端口号不同存在跨域,我们这里配置代理解决跨域问题
axios.get('/api' + '/user/getUserList').then(res => {console.log(res)})
可以看到,数据完美返回,接下来,我们利用客户端传参,服务端处理根据请求参数处理返回数据
客户端
let data = {
id:2
}
axios({
url:'/api' + '/user/getUserList',
method:'get',
params:data
}).then(res => {console.log(res)})
服务端
...
// 访问 /user/getUserList
app.get('/getUserList', (req, res) => {
let {id} = req.query // 取出参数
fs.readFile('user.json', 'UTF8', (err, data) => {
if (err) throw err
data = JSON.parse(data).filter(item => item.userId = id)
res.send(data)
})
})
...
我们看到,数据已经完美处理并返回客户端
到这里,基本的客户端与服务端交互已经写好了,但是发现我们都是用的get请求
因为get请求参数在请求头里,通过query可以获取到对应参数,但是他的安全性并不高
我们开发中很多场景会用到 post / put / delete 等等请求,他们的参数都存在请求体里面
…
…
下篇文章我们处理请求体的参数,JSON or 序列化:
Node.js 解析request.body请求体参数