Node.js 使用express搭建后台服务器 ( 进阶篇 )

上篇文章我们介绍了利用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}`)
})

Node.js 使用express搭建后台服务器 ( 进阶篇 )_第1张图片
看到服务已经跑起来了,接下来我们写几个路由 分别是 /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 发现都可以访问到了
Node.js 使用express搭建后台服务器 ( 进阶篇 )_第2张图片
Node.js 使用express搭建后台服务器 ( 进阶篇 )_第3张图片
路由的效果实现了,但是如果路由更多的话都写到一个文件里,很显然是不符合模块化开发,接下来我们利用express - Router()分别模块化

Express.Router()

新建router文件夹,分别有user.js、news.js
Node.js 使用express搭建后台服务器 ( 进阶篇 )_第4张图片

/**
 * 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了
Node.js 使用express搭建后台服务器 ( 进阶篇 )_第5张图片
Node.js 使用express搭建后台服务器 ( 进阶篇 )_第6张图片

API接口

接下来我们就写几个简单的接口供前端使用
先创建一个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)})

Node.js 使用express搭建后台服务器 ( 进阶篇 )_第7张图片
可以看到,数据完美返回,接下来,我们利用客户端传参,服务端处理根据请求参数处理返回数据

客户端

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)
	})
})
...

我们看到,数据已经完美处理并返回客户端
Node.js 使用express搭建后台服务器 ( 进阶篇 )_第8张图片
到这里,基本的客户端与服务端交互已经写好了,但是发现我们都是用的get请求

因为get请求参数在请求头里,通过query可以获取到对应参数,但是他的安全性并不高

我们开发中很多场景会用到 post / put / delete 等等请求,他们的参数都存在请求体里面


下篇文章我们处理请求体的参数,JSON or 序列化:

Node.js 解析request.body请求体参数

你可能感兴趣的:(Node.js,nodejs,中间件)