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

在这里插入图片描述
看到服务已经跑起来了,接下来我们写几个路由 分别是 /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()分别模块化

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了
在这里插入图片描述
在这里插入图片描述

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

在这里插入图片描述
可以看到,数据完美返回,接下来,我们利用客户端传参,服务端处理根据请求参数处理返回数据

客户端

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请求体参数

  • 7
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

前端小小白zyw

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值