express

NodeJS开发的时候是有一些弊端

请求服务的时候不方便,比如URL的匹配不方便,对于静态页面和文件请求不方便等等

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

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

安装   cnpm install –save express

1、基本使用

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

app.get("/",function (req,res) {
    res.send("<h1>你好 express</h1>")
})
app.listen(3000)

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

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

app.listen(3000)

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

2、中间件

2.1 中间件?

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

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

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

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

app.get("/",function(req,res){
  console.log("我是GET请求")
})

app.post("/",function(req,res){
  console.log("你好我是POST请求")
})
app.listen(3000)

2.2 中间件的路径

原生NodeJS路由的匹配是很精确的,比如/star此时路由地址是/star?name=小明,此时由于没有精确匹配不会显示页面

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

node原生匹配路径

var http = require("http");
var server = http.createServer(function (req,res) {
    res.setHeader("Content-type","text/html;charset=UTF8")
    if(req.url == '/star'){
        res.end("<h1>原生node匹配</h1>")
    }else{
        res.end("<h1>无页面</h1>")
    }
})
server.listen(3000)

express 路由匹配

var express = require("express");
var app = express()
app.get("/star",function (req,res) {
    res.send("<h1>express 匹配的路径</h1>")
})
app.listen(3000)

2.3 中间件的 通配符

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

var express = require("express")
var app = express()
app.get("/:name/:id",function (req,res) {
    let name = req.params.name;
    let id = req.params.id;
    res.send("<h1>你好我是"+name+",我的学号是"+id+"</h1>")
})
app.listen(3000)

此时我们就省略了自己的正则匹配了

还有一个通配符是*

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

*匹配的是任何,表示的是匹配任何的页面地址,一般用来做路由的重定向,或者是抛出无页面的显示

2.4 中间件的顺序

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

app.get("/xiaogang/10002",function(req,res){
  res.send("<h1>我是小刚,我的学号是10002,我的身份是班长</h1>")
})

app.get("/:name/:id",function(req,res){
  let name = req.params.name;
  let id = req.params.id;
  res.send("<h1>我是"+name+",我的学号是"+id+",我的身份是学生</h1>")
})

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

2.5 next()方法

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

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

var express = require("express")
var app = express()
var num  = 0;
app.get("/xiaoming/1001",function (req,res,next) {
    num ++ ;
    next()
})
app.get("/:name/:id",function (req,res) {
    let name = req.params.name;
    let id = req.params.id;
    res.send("<h1>你好我是"+name+",我的学号是"+id+"计数器"+num+"</h1>")
})
app.listen(3000)

num的数值也会递增

3、输出

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

3.1文案或者包含文件的HTML结构体使用res.send()

var express = require("express");
var app = express()
app.get("/",function (req,res) {
    res.send("你好")
})
app.listen(3000)

3.2 JSON格式,使用res.json()

app.get("/" ,function (req,res) {
    res.json({
        "name":"张三",
        "age": "25岁",
        "sex": "男",
        "tel":13526597452
    })
})

3.3 JSONP ,使用res.jsonp()来输出

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

模拟本地服务器 发送请求     phpnow 》 htdocs中

    <button>点击</button>
    <script src="./jquery.min.js"></script>
    <script>
        $("button").click(function () {
            alert(1)
            $.ajax({
                "url":"http://127.0.0.1:3000/",
                "dataType":"JSONP",
                "jsonpCallback":"expressJs",
                "success":function (data) { 
                    console.log(data,'data')
                 }
            })
        })
    </script>

app,js

var express = require("express")
var app = express()
app.get("/" ,function (req,res) {
    res.jsonp({
        "name":"张三",
        "age": "25岁",
        "sex": "男",
        "tel":13526597452,
        "family":["父亲","母亲","兄弟","孩子"]
    })
})
app.listen(3000)

3.4 外置页面 sendFile()

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

var express = require("express")
var app = express()
app.get("/",function (req,res) {
    res.sendFile(__dirname + "/public/name.html")
})
app.listen(3000)

3.5 跳转 res.redirect()

var express = require("express")
var app = express()
app.get("/",function (req,res) {
    res.redirect('https://www.baidu.com/')
})
app.listen(3000)

4、文件静态化

原生NodeJS所有的文件请求,都必须设定一次url的匹配,很不方便

express提供一个“静态化”的功能,指的是改静态化了文件夹,此时自动拥有路由

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

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

app.use(express.static("public"))
app.listen(3000)

http://127.0.0.1:3000/images/0.jpg

上图的路径从 public里面开始的,因为public文件夹已经被静态化了

此时的静态化路由地址也是可以自定义的

var express = require("express");

var app = express();
app.use("/wenjianjia",express.static("public"));
app.listen(3000)

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值