一、express是什么?

Express是一个基于Node平台的web应用开发框架,它提供了一系列的强大特性,帮助你创建各种Web应用这里是express官网 可以使用 npm install express 命令进行下载。

1. Express框架特性

- 提供了方便简洁的路由定义方式
 - 对获取HTTP请求参数进行了简化处理
 - 对模板引擎支持程度高,方便渲染动态HTML页面
 - 提供了中间件机制有效控制HTTP请求
 - 拥有大量第三方中间件对功能进行扩展

二、如何使用express?

1. 安装express之前,需要使用npm init 对工程进行初始化

2. 安装express

npm install express --save 或者
cnpm install express   --save

3. 使用express

const express= require('express');//引入框架
const app= express();//执行框架函数,express实例

//路由分发机制
//路由匹配
//指定路由      接收get请求
//在原生代码中需要createServer方法创建服务器,express中不需要使用该方法创建服务器
//get方法可以接收get请求
//接收get请求的 根路径请求
//当接收到客户端请求时,就触发服务器,判断是post或者是get请求,
//判断完毕之后,进入对应的路由匹配
app.get('/',(req,res)=>{
    // res.end('hello');//node原生方法
    // res.send('hello');//发送  将数据发送给客户端,结束请求
    res.send('成功');
    // res.send({code:200,msg:"成功,hello"});
});

app.get('/login',(req,res)=>{
    res.end('登录');
})

//post方法可以接收post请求
app.post('/',(req,res)=>{
    res.end('post');
});

//启动服务器,监听指定端口
app.listen(3000);

三、express中常见的路由配置

路由由请求方法和路径共同组成。只有请求方法和路径都匹配,才会执行路由对应的回调函数

方法

描述

get(path,callback)

get请求

post(path,callback)

post请求

all(path,callback)

接收所有的请求

user([path],callback)

中间件,path传值代表匹配的是一个一级路由

route(path).get(callback).post(ballback)

中转作用

四、请求参数

1. 传统方案传递参数:

http://localhsot:3000?username=jack&pwd=124 get请求,请求参数可以通过request对象的query属性来获取

app.get('/',(req,res)=>{
    console.log(req.query);//get请求参数
    res.send('get');
});

post请求的参数,不可以使用query对象来获取,
可以监听data和end事件来读取数据

2. 通过参数路径的配置来传递参数

/ login?username=admin&pwd=123
// login/admin/123
app.get('/login/:username?/:pwd?',(req,res)=>{
    console.log(req.params);
    res.send('login');
});

注意:通过路径参数传递,也要满足路径匹配原则,例如:上例中,username和pwd参数可以传递也可以不传递(因为使用正则的?来修饰,若没有修饰,则两个参数都必须传递,否则不能匹配)

总结:两种参数传递方案对比
1)路径参数相比于查询字符更具有隐蔽性
2)路径参数配合正则表达式可以实现更加强大的功能
3)查询字符的传递方案不能控制用户是否传递了参数,若有些参数是必传的内容,则使用路径参数更加合理。

五、请求路径

在express中,请求路径支持正则匹配原则

/*
    正则字符:
        ?   零次或一次
        *   任意字符
        +   一次或多次
*/

//  /a  或者 /ab
// app.get('/ab?',(req,res)=>{
//     res.send('ab路由');
// });

//  a(bc)?   --> bc可以出现0次或者一次
//  a(bc)+   --->bc可以出现一次或者多次
app.get('/a(bc)+',(req,res)=>{
    res.send('ab路由');
});

六、设置请求头信息

可以使用原生的NodeJS中的方法
setHeader()
writeHead()
也可以使用express带的方法:
set()
header()

//原生node
    res.setHeader("Access-Control-Allow-Origin",'*');
    res.setHeader('content-type',"text/plain;charset=utf8");
    // res.writeHead(200,{
    //     "Access-Control-Allow-Origin":'*'
    // });

    //express  
    // res.set("Access-Control-Allow-Origin",'*');
    // res.header("Access-Control-Allow-Origin",'*');
    // res.header({
    //     "Access-Control-Allow-Origin":'*'
    // });

注意:若使用writeHead()搭配send()方法使用时,需要注意,writeHead方法只能执行一次,send默认会设置头信息,有可能报错

七、response对象的响应方法

express 常用的orm框架_express 常用的orm框架

八、中间件的使用

中间件(middleware)就是一个方法,但是一般情况下,中间件方法需要携带next参数

express 常用的orm框架_get请求_02


使用中间件:

app.use(path,callback);

use方法的使用类似all方法,都是能够接收任何请求,例如:get、post、put/delete…

二者的路径匹配规则不一致:
all()的路径匹配是一个精准匹配(必须相等才可以)
use()定义的路径,是一个一级路由,意味着,在后面追加任意路由均可匹配

例如:
/ 匹配:/, /apple ,/index …一切都可以匹配
/index 只能匹配:以/index为一级路由的路由,例如:/index, /index/admin,…