express框架

Express框架

Express简化了关于NodeJS应用的开发

官网地址:https://www.expressjs.com.cn/

 

 使用 npm install express --save进行安装

基本使用

var express=require("express")
var app=express()
app.get("/",function(req,res){
    res.send("我是express框架")
})

app.listen(3000,function(){
    console.log("监听3000端口")
})

 

 这是express的框架

var express = require("express");
var app = express();

罗列中间件请求内容
罗列中间件请求内容
罗列中间件请求内容

app.listen(3000,function(){
  console.log("监听3000端口")    
})

我们引入express之后,这个express就是一个函数,调用这个函数就可以创建一个对象,这个对象里面封装了所有的express的方法,需要注意的是,一个程序只能有一个对象

 

中间件

什么是中间件?

中间件就是所谓的HTTP的请求

中间件所干的事情就是用户访问页面的时候当前这次请求的处理事件

我们现在可以使用请求方式来处理不同的事情,在同一个路由地址的情况下

var express=require("express")
var app=express()
app.get("/",function(req,res){
    console.log("我是get")
})
app.listen(3000,function(){
    console.log("监听3000端口")
})

 中间件的路径

之前使用原生NodeJS的时候发现路由的匹配是很精确的,比如/keyeking此时路由地址是/keyeking?name=小明,此时由于没有精确匹配不会显示页面

但是express帮我们封装了对应参数集合,匹配的只是路由的主干体

var express=require("express")
var app=express()
app.get("/keyeking",function(req,res){
    res.send("我是keyeking")
})
app.listen(3000,function(){
    console.log("监听3000端口")
})

 

下面的URL都是可以直接进入访问这个路由内容的

 

 中间件的通配符

 express使用:来匹配路由地址,我们可以通过req.params.**来获取这个参数

var express=require("express")
var app=express()
app.get("/:name/:sex",function(req,res){
    var name = req.params.name;
    var sex = req.params.sex;
    res.send("hello,我是"+name+",我是"+sex+"")
    console.log(name,sex)
  })
  
app.listen(3000,function(){
    console.log("监听3000端口")
})

还有一个通配符是*

app.get("*",function(req,res){
  res.send("无页面")
})

 中间件的顺序

所有的中间件是必须要有顺序的,此时如果我们的中间件内容会匹配多个,此时如果不“放行”,会进行拦截。

var express=require("express")
var app=express()
app.get("./xioaming/10000",function(){
    var name=req.params.name;
    var id=req.params.id
    res.send("我是"+name+"我学号为"+id)

})
app.get("/:name/:id",function(req,res){
    var name=req.params.name;
    var id=req.params.id
    res.send("我是"+name+"我学号为"+id)
})
  
app.listen(3000,function(){
    console.log("监听3000端口")
})

此时如果页面的路由地址是/xiaoming/1会返回第一个中间件的内容,第二个中间件虽然也符合匹配条件,但是不会再输出内容, 因为拦截了

next()方法

当一个中间件内容匹配了之后我们此时想让其他的中间件继续进行匹配,此时可以使用next()进行放行

我们可以模拟匹配多个路由,此时我们在第一个中间件中进行一个计数器的设置,然后第二个中间件中显示这个结果

var express=require("express")
var app=express()
var num = 0;
app.get("/xiaoming/1",function(req,res,next){
  console.log(123456789)
    num++
  next()
})
app.get("/:name/:id",function(req,res){
    var name=req.params.name;
    var id=req.params.id
    res.send("我是"+name+"我学号为"+id+"计算器"+num)
})
  
app.listen(3000,function(){
    console.log("监听3000端口")
})

随着页面的刷新,num的值也会逐渐增加,此时就达到了放行,两个中间件内容都得到了输出

 输出

下面所有的输出方法,都不需要我们自己写setHeader(),会帮你自动带上Content-type

如果输出文案或者包含文件的HTML结构体使用res.send()

app.get("/",function(req,res){
  res.send("hello")
})

如果输出的是JSON格式,可以使用res.json()

app.get("/",function(req,res){
  res.json({"a":1,"b":2,"c":[1,2,3,4]})
})

如果输出的内容是JSONP,此时使用res.jsonp()来输出,此时express会自动检测callback的请求参数自动封装对应的函数执行结果

app.get("/",function(req,res){
  res.jsonp({"a":1,"b":2,"c":[1,2,3,4],"d":{"e":678}})
})

如果请求的是一个外置的页面,此时要用sendFile(),需要注意是一定要使用绝对路径

var express=require("express")
var app=express()

app.get("/",function(req,res){
    res.sendFile(__dirname+"/1.html")
  })
  
app.listen(3000,function(){
    console.log("监听3000端口")
})

如果想要跳转页面,可以使用res.redirect()

app.get("/",function(req,res){
  res.redirect("http://www.baidu.com")
})

 文件夹的静态化 

原生NodeJS的所有的文件请求,都必须设定一次url的匹配,很不方便,所以express提供一个“静态化”的功能,指的是改静态化了文件夹,此时自动拥有路由。

app.use(express.static("需要静态化的文件夹名称"))

  

┣ app.js

│public

│┣ index.html

││images

││┣1.png

var express=require("express")
var app=express()
app.use(express.static("public"))
app.listen(3000,function(){
    console.log("监听3000端口")
})

此时文件夹内部有一个图片,可以看到

发现当前的路径是从public里面开始的,因为public文件夹已经被静态化了

 我们的静态化路由地址也是可以自定义的

var express=require("express")
var app=express()
app.use("/public",express.static("public"))   //自定义路由地址
app.listen(3000,function(){
    console.log("监听3000端口")
})

posted @ 2021-10-18 21:59  keyeking  阅读(139)  评论(0编辑  收藏  举报