Node.js Express 框架(1)

1.Express介绍

Express 是一个简洁而灵活的 node.js Web应用框架, 提供了一系列强大特性帮助你创建各种 Web 应用,和丰富的 HTTP 工具。

Express的特点:

  • 实现了路由功能
  • 中间件功能
  • 扩展了req和res对象
  • 可以集成其他模版引擎

Express的安装:

npm i express -S

2.基本实例

使用express搭建一个基本的服务器:

  • 步骤一:引入express
  • 步骤二:创建服务对象 express()
  • 步骤三:设置路由,根据路径给客户端响应相关的数据
  • 步骤四:开启服务
//引入express
const express = require("express")
//创建服务对象
let app = express()

//设置路由,监听根路径的访问
app.get("/",function(req,res){
    res.send("<h1>这是首页</h1>")
})

//开启服务,监听80端口
var server = app.listen(80,function(){
    //当前当前监听的端口号
    var port = server.address().port
    console.log(`Server running at http://127.0.0.1:${port}/`)
})

3.注册路由

  • 注册路由有几种方法
方法 说明
app.get() 只接收客户端get方式提交的请求,且路径必须一致,(忽略query参数)
app.post() 只接收客户端post方式提交的请求,且路径必须一致
app.all() 不限定请求的方法,但是请求路径要求严格匹配(可使用通配符*匹配所有路径)
app.use() 不限定请求的方法,get/post等都可以。路径模糊匹配,这个路径和他的子路径都可以匹配
  • app.all()与 app.use()的区别:一个是路径模糊匹配(可匹配/api/xxx等接口),一个是精确匹配(可使用通配符*)

4.向客户端响应数据

  • 设置响应头:res.header()
app.all('*', function (req, res, next) {
    //跨域允许访问的域名(通配符表示所有域名皆可访问,多个域名用都好隔开)
    res.header("Access-Control-Allow-Origin",'*')
    //跨域允许的header包含哪些字段
    res.header("Access-Control-Allow-Headers","Content-Type,Authorization,X-Requested-With")
    //跨域允许的请求方式
    res.header("Access-Control-Allow-Methods","PUT,POST,GET,DELETE,OPTIONS")
    // 可以带cookies
    res.header("Access-Control-Allow-Credentials",1)
    //执行下一步(跳转到下一个路由判断中)
    next()
})
  • 设置HTTP状态码:res.status()
//设置路由,监听根路径的访问
app.get("/unlogin",function(req,res){
    //返回数据
    res.status(401).end('未登陆')
})
  • 向客户端响应数据:res.send(),它会自动发送更多的响应报文头,无需手动设置Content-type(响应数据的同时内部会调用red.end()方法结束此次响应,当前也意味着res.send()只能发送一次)
//发送数组给客户端
res.send([0,1,2,3])

//发送对象给客户端
res.send({name:"雍正",age:45})

  • 向客户端响应数据:res.end(),它需要设置Content-type,且只能接收字符串和Buffer,其他类型的数据会报错

5.获取get传参

  • 在路径后面拼接 ?key1=val1&key2=val2 的方式被称为 query传参,例如:
http://127.0.0.1/process_get?year=2019&mouth=12&day=13 
app.get("/process_get",function(req,res){
    console.log(req.query.year)//2019
    console.log(req.query.mouth)//12
    console.log(req.query.day)//13
    res.send("欢迎访问get提交页面")
})
  • 通过设置占位符 ,将原本属于路径的信息截取下来的成为params传参。这个方式需要注册路由的时候设置占位符,例如:
http://127.0.0.1/date/2012/12/12
app.get("/date/:year/:mouth/:day",function(req,res){
    console.log(req.params.year)//2012
    console.log(req.params.mouth)//10
    console.log(req.params.day)//13
    res.send('欢迎访问params页面')
})

6.获取post传参

  • 中间件:post方式提交的数据存放到请求体中,不在请求头,要解析请求体的数据,需要用到中间件 body-parse

  • 参数位置:安装body-parse,并引入入口文件中,进行相应的配置后,req会多出一个属性req.body,post方式提交的数据就存放在req.body中

  • 安装body-parse

npm install body-parse
  • 引入 body-parse 进行相应的配置
var app = express()
var bodyParser = require('body-parser')

var app = express()

// parse application/x-www-form-urlencoded
app.use(bodyParser.urlencoded({ extended: false }))
// parse application/json
app.use(bodyParser.json())
// parse text
app.use(bodyParser.text())

app.post("/process_post",function(req,res){
    res.send("欢迎访问post提交页面")
    console.log(req.body)
})

{year:'2019',mouth:'10',day:'13'}

7.静态资源托管服务

  • express.static():可以进行静态资源托管服务,一般与app.use()注册路由搭配使用
//加载express
const express = require('express');
const path = require('path');

//创建服务对象
var app = express();

//访问/static下的路径视为访问静态资源 http://example.com/static/3.png => public/3.png
app.use('/static', express.static(path.join(__dirname,'public')));

//启动服务
app.listen(8080,function(){
    console.log('http://localhost:8080');
})
  • 设置多个根目录(当 public目录中找不到 资源文件时会接着去public2找)
app.use('/static', express.static(path.join(__dirname,'public')));
app.use('/static', express.static(path.join(__dirname,'public2')));
posted @ 2019-10-12 11:55  ---空白---  阅读(423)  评论(0编辑  收藏  举报