node.js的中间件和express

120 阅读2分钟

「这是我参与2022首次更文挑战的第4天,活动详情查看:2022首次更文挑战

Express

通过express来创建服务器

const express=require('express')
const app=express()
app.listen(80,()=>{
    console.log('express server running at http://127.0.0.1');
})

监听get请求 通过app.get()方法

Express的运行原理:

底层:http模块

Express框架建立在node.js内置的http模块上。咱们用Express的构造方法,生成一个Epress实例。两者的回调函数都是相同的。Express框架等于在http模块之上,加了一个中间层。

const express=require('express')
const app=express()

app.get('/',(req,res)=>{

    res.send({name:'zs',age:20,gender:'男'})
    console.log(req.query);
    res.send(req.query)
})
app.post('/',(req,res)=>{
    res.send('请求成功')
})

app.listen(3000,()=>{
    console.log('express server running at http://127.0.0.1');
})

获取url的动态参数

通过params匹配到动态参数,如果http://127.0.0.1/user/1 那么输出的id就是1

app.get('/user:id',(req,res)=>{
    console.log(req.params);
    res.send(req.params)
})

向外托管静态资源express.static()

app.use(express.static('./game'))

页面输出http://127.0.0.1/index.html   -----index.html就是game文件夹下的html

挂载路由前缀,想要获取双重目录下的js/css/html文件需像如下代码一样挂载路由前缀

app.use('./game',public(express.static('./files')))

nodemon:在编写调试node.js代码时如果修改了项目,则需要频繁的close掉之后在重启项目,nodemon为我们提供了自动更新保存代码的能力。

 npm  i -g nodemon

当我们在运行时,需要输入

 nodemon fork.js
 
//之后会比原来运行时多出
 [nodemon] 2.0.15
[nodemon] to restart at any time, enter `rs`
[nodemon] watching path(s): *.*
[nodemon] watching extensions: js,mjs,json

中间件

简单说,中间件(middleware)就是处理HTTP请求的函数。它最大的特点就是,一个中间件处理完,再传递给下一个中间件。App实例在运行过程中,会调用一系列的中间件。

每个中间件可以从App实例,接收三个参数,依次为request对象(代表HTTP请求)、response对象(代表HTTP回应),next回调函数(代表下一个中间件)。每个中间件都可以对HTTP请求(request对象)进行加工,并且决定是否调用next方法,将request对象再传给下一个中间件。

一个不进行任何操作、只传递request对象的中间件,就是下面这样。

var express=require('express')
var app=express()
const nm = function(res,req,next){
    console.log('这是最简单的中间件');
    next();
}
app.use(nm)

细讲next的作用:函数流调,把处理好的给下一个中间件 全局中间件:客户端发起任何请求,到达服务器都会触发中间件,叫全局生效的中间件 作用:多个中间件共享同一份req和res。 注意事项: 在路由之前注册

//nm
//中间件里抽象定义出方法,之后在请求中使用
const time=Date.now()
req.startTime=time

局部生效中间件

app.get('/',nm1,(req,res)=>{  
    res.send('home page'+req.startTime)
})