express作为第三方模块,可以简化我们的很多操作。例如:在创建服务器方面:
通过http创建服务器
const http = require('http');
const cpp = http.createServer();
通过express创建服务器
const express=require('express');
const app=express();
只看创建服务器好像不是那么明显,但是express3.0为我们提供了get和post方法;express4.0中更是为我们提供了use方法。再例如:在为服务器对象添加请求事件上:
//引入url模块来,利用parse方法对请求地址解析为对象格式
const url=require('url');
app.on('request',(req,res)=>{
//需要判断提交信息的方式是post还是get
const method=req.method;
//利用对象解构对所需要的请求路径等信息进行解构提取
//当然咯,如果只请求地址,不携带请求数据,那么req.url的值和下面pathname的值是一样的
//也就不引入url来做地址解析,把下面判断中的pathname都换成req.url就可以了
//但是携带数据后,req.url中就包含了请求数据,所以也就得做解构提取请求地址了
const {pathname}=url.parse(req.url);
//对请求方式进行判断,再对请求路径进行判断
if(method=='GET'){
if(pathname=='/list'){
//省略任务
}else if(pathname=='/add'){
//省略任务
}
}else if(method=='POST'){
if(pathname=='/add'){
//省略任务
}else if(pathname=='/modify'){
//省略任务
}
}
})
app.listen(3000);
使用express来对相应的请求进行判断响应时:
const express=require('express');
const app=express();
app.get('/list',(req,res)=>{
//省略任务
})
app.get('/add',(req,res)=>{
//省略任务
})
app.post('/add',(req,res)=>{
//省略任务
})
app.post('/modify',(req,res)=>{
//省略任务
})
app.listen(3000);
这样一看就很简洁了,express对象存在get和post方法,这样也就设定了请求方式,不需要对请求方式进行判断。
Express4.0中出现了Router,可以建立Router对象来设定不同的响应
const express=require('express');
const router=express.Router();
const app=express();
router.get('/demo1',(req,res)=>{
res.send('demo1页面');
})
router.get('/demo2',(req,res)=>{
res.send('demo2页面');
})
app.use('/DEMO',router);
//当地址栏访问/DEMO/demo1时显示:demo1页面
//当地址栏访问/DEMO/demo2时显示:demo2页面
app.listen(3000);
由此可见,可以通过改变use方法可以传入两个参数:第一个是根目录;第二个是路有对象
当我们需要实现不同功能页面时,
可以建立不同的Router对象,以不同的路径套用到use应用程式中
可以发现app.use的第二个参数可以传入路由对象,那么get或post呢?
app.get('/DEMO/demo1',router);
//报错,找不到,404
同理,post的第二个参数也不可以传入Router路由对象
app.use(path,callback) callback既可以是router对象也可以是函数
app.get(path,callback) callback只可以是函数