NodeJS中对于express模块的使用
- expres是基于Node.js平台、快速、开放的web开发框架
- 下载
npm install express
或npm i express
- 使用(创建web服务器)
- 引入express模块
const express = require('express')
- 创建web服务器
var app = express()
- 监听端口
app.listen(8080)
端口号可以自定义,但要保证端口不冲突
路由
- 浏览器向服务器发起请求,Web服务器根据url和请求的方法作出响应
每一个路由只能处理一个请求
- 路由三要素:
请求的方法(post、set)
、请求的url
、响应(回调函数)
get请求下的数获取
app.get(url, callback)
app.get(url,function(request,response){...})
- 回调函数中常见方法和变量
response
(响应对象)- send() 响应的内容,路由中只使用一次
- sendFile() 响应文件,要求必须使用绝对路径__dirname
- redirect() 响应的重定向,跳转到另一个url
request
(请求对象)- method 请求的方法
- url 请求的url
- headers 请求头信息
- query 获取请求形式为查询字符串形式的数据,格式为对象
- params 获取路由器传递的参数
请求路径:http://localhost:8080/a/123/34
服务器端:app.get('/a/:first/:second',function(request,response){// request.param{first:'123',second:'34'}})
post请求下的数据获取
- post请求和get请求对于
response
操作都差不多
request.on('data',function(mydata){
//mydata为buffer格式
mydata.toString() // 格式为查询字符串,需要解析为对象
var obj = querystring.parse(mydata.toString()) //需要通过querystring模块对得到的字符串进行解析得到参数对象
})
路由器 (管理路由)
- 作用:路由在使用的过程中,不同模块下的路由可能出现相同的url,把同一模块下的路由放到特定的路由器,避免不同模块下的同名路由混用
var router = express.Router()
创建路由器module.exports = router
抛出路由器给外部使用
- 创建路由器
// user.js
//1.1路由器是express下的一个功能
const express=require('express');
//1.2创建路由器对象
var router=express.Router();
//1.3往路由器中添加路由
router.get('/list1',function(req,res){
res.send('用户列表1');
});
router.get('/list2',function(req,res){
res.send('用户列表2');
});
//1.4导出路由器对象
module.exports=router;
- 在Web服务器中使用路由器
// app.js
//2.1引入路由器模块
const userRouter=require('./user.js');
//2.2使用路由器,挂载到特定的url
app.use('/user',userRouter);
- 访问:
http://localhost:8080/user/list1
http://localhost:8080/user/list2
中间件
- 为主要的业务逻辑服务,接收到请求,以及作出响应(个人理解类似于插件的安装过程,安装以后才能正常使用)
- 分类:应用级中间件、路由中间件、内置中间件、第三方中间件、错误处理中间件
- 路由中间件
// 配合引入路由器时使用
app.use('/user',userRouter)
app.use('/product',productRouter)
- 应用级中间件(自定义中间件)
app.use('/reg',function(req,res,next){
// 对请求首先进行一定的限制操作 ex:判空操作、校验操作等
//拦截url为/reg的路由
next(); /next是一个函数,表示执行下一个中间件或者路由
});
- 内置中间件
// 把所有的静态资源托管到了某个目录,如果浏览器请求静态资源,自动到该目录下寻找,无需创建路由
app.use(express.static('托管的目录路径'));
如果一个服务器下有不同托管文件中有相同的文件名,按照顺序选择
第一个文件
- 第三方中间件
//以解决post请求中需要对传递过来的参数进行解析为例
// body-parser中间件的使用
//1.下载安装
npm i body-parser;
//引入中间件模块
const bodyParser=require('body-parser');
//3.使用中间件,urlencoded将post请求的数据解析为对象
app.use(bodyParser.urlencoded({
extended:false //不使用第三方的qs模块解析查询字符串为对象,而是使用系统的
querystring模块
}));
//4.在post请求的路由中
req.body //返回为对象形式
对于请求栏获取数据的方式
名称 | 形式(浏览器地址栏) | (路由)获取 |
---|---|---|
get 传递 | lid=1 &pname=dell | req.query |
路由 传递 | /shopping/4999 | req.params |
post 传递 | 无法通过url查看 | req.body前提是要使用中间件 body-parser |