目录
express框架
1. 问题
1.1 下面报错原因及解决方法
报错原因:
- 还没有安装
nodemon
包。- 解决方法:全局安装nodemon
- 命令
npm install nodemon -g
- 已安装,但命令行未初始化。
2. 编写路由的两种写法
2.1 使用express
编写路由
// 引入express
const express=require('express');
// 创建一个web程序
const app =express()
// 添加路由
// 使用express编写路由
app.get('/',(req,res)=>{
res.send('home')
})
app.get('/list',(req,res)=>{
res.send('list')
})
// 启动服务
app.listen(3000,()=>{
console.log('Server is running at http://127.0.0.1:3000');
})
2.2 使用node.js
编写路由
// 使用node.js编写路由
// 引入系统模块 http
// const 是常量 不可修改
const http = require('http');
// 创建 http 服务 设置常量接收
const app = http.createServer();
app.on('request',(req,res)=>{
if(req.url == '/' && req.method =='GET'){
res.end('home')
// console.log(aaa);
}else if(req.url == '/list' && req.method =='GET'){
res.end('list')
}
})
// 启动服务
app.listen(3000,()=>{
console.log('Server is running at http://127.0.0.1:3000');
})
3. send
与 end
的区别
3.1 区别
send
方法根据参数,自动设置响应头中的Content-type
属性的值(自动根据返回内容,来设置Content-type
属性的值)end
却不会自动设置
3.2 如何让end
也有Content-type
属性的值
-
只有手动设置,自己在返回前来设置
Content-type
属性的值res.setHeader('Content-type','text/html')
4. 中间件
4.1 中间件概念
中间件就是一堆方法,可以接收客户端发来的请求、可以对请求做出响应,也可以将请求继续交给下一个中间件继续处理。
中间件主要由两部分构成,中间方法以及请求处理函数
例子:
我开了一家炸鸡店(业务端),然而周边有太多屠鸡场(底层),为了成本我肯定想一个个比价, 再综合质量挑选一家屠鸡场合作(适配不同底层逻辑)。由于市场变化,合作一段时间后,或许性价比最高的屠鸡场就不是我最开始选的了,我又要重新和另一家屠鸡场合作,进货方式、交易方式等等全都要重来一套(重新适配)。然而我只想好好做炸鸡,有性价比高的肉送来就行。于是我找到了一个专门整合屠鸡场资源的第三方代理(中间件),跟他谈好价格和质量后(统一接口),从今天开始,我就只需要给代理钱,然后拿肉就行。代理负责保证肉的质量,至于如何根据实际性价比,选择不同的屠鸡场,那就是代理做的事了。
4.2 代码案例解释
// 引入express
const express=require('express');
// 创建一个web程序
const app =express()
app.get('/list',(req,res,next)=>{
console.log('list1');
next() // 执行下一个中间件
})
app.get('/list',(req,res)=>{
res.send('list2')
})
// 启动服务
app.listen(3000,()=>{
console.log('Server is running at http://127.0.0.1:3000');
})
4.3 代码解释的时候提到的use
use 方法可以处理各种类型的请求(get、post、put、delete。。。。)
1、能够捕获各种类型的请求
2、能够捕获各种资源的请求
// 引入express
const express=require('express');
// 创建一个web程序
const app =express()
/**
* use 方法可以处理各种类型的请求(get、post、put、delete。。。。)
* 1、能够捕获各种类型的请求
* 2、能够捕获各种资源的请求
*/
app.use((req,res,next)=>{
let isLogin = true
if(isLogin){
next() // 继续执行后面的匹配
}else{
res.send({msg:'必须登录才可以访问此api'})
}
})
app.get('/api/blog/list',(req,res)=>{
res.send({msg:'list'})
})
app.get('/api/blog/del',(req,res)=>{
res.send({msg:'del'})
})
app.get('/api/blog/update',(req,res)=>{
res.send({msg:'update'})
})
// 如果用户请求的地址不能匹配上面的任何一个
// 可以执行下面的代码
app.use((req,res,next)=>{
res.send(404,服务器内部错误)
})
// 启动服务
app.listen(5000,()=>{
console.log('Server is running at http://127.0.0.1:5000');
})
上面一个响应
// 如果用户请求的地址不能匹配上面的任何一个
// 可以执行下面的代码
app.use((req,res,next)=>{
res.send(404,服务器内部错误)
// res.status(404).send('not found')
})
5. 路由分组
当有多个路由时,一类的可以进行分组
5.1 express
方法
// 引入express
const express=require('express');
// 创建一个web程序
const app =express()
// 创建路由对象
const blog = express.Router()
// 使用 app.use 中间件关联 blog 路由对象
app.use('/api/blog',blog)
blog.get('/list',(req,res)=>{
res.send({msg:'list'})
})
blog.get('/del',(req,res)=>{
res.send({msg:'del'})
})
blog.get('/update',(req,res)=>{
res.send({msg:'update'})
})
// 启动服务
app.listen(5000,()=>{
console.log('Server is running at http://127.0.0.1:5000');
})
5.2 整合,变清爽
app.js
文件router
目录blog.js
文件user.js
文件
app.js
文件
// 引入 express
const express = require('express')
// 创建一个web程序
const app = express()
const blog = require('./router/blog')
const user = require('./router/user')
app.use('/api/blog',blog)
app.use('/api/user',user)
// 启动服务
app.listen(3000,()=>{
console.log('Server is runnint at http://127.0.0.1:3000');
})
blog.js
文件
const express = require('express')
// 创建 express 的路由对象
// 创建一个路由对象,与blog相关的所有api都注册到这个路由对象上
const blog = express.Router()
blog.get('/list', (req, res, next) => {
res.send({ msg: 'list' })
})
blog.get('/del', (req, res) => {
res.send({ msg: 'del' })
})
blog.post('/new', (req, res) => {
res.send({ msg: 'new' })
})
blog.post('/update', (req, res) => {
res.send({ msg: 'update' })
})
module.exports = blog
user.js
文件
const express = require('express')
const user=express.Router()
user.get('/list', (req, res) => {
res.send({ msg: '用户列表' })
})
user.get('/detail', (req, res) => {
res.send({ msg: '用户信息' })
})
user.post('/new', (req, res) => {
res.send({ msg: '新增用户' })
})
user.post('/update', (req, res) => {
res.send({ msg: '修改用户' })
})
user.get('/del', (req, res) => {
res.send({ msg: '删除用户' })
})
user.get('/login', (req, res) => {
res.send({ msg: '用户登录' })
})
user.get('/logout', (req, res) => {
res.send({ msg: '用户退出' })
})
module.exports=user