前言
express框架其实在node中是一个很重要的框架,它里面有很多功能在我们开发项目中都是经常会用到的,比如搭配http使用,路由,服务端渲染等,今天我们这篇文章主要介绍express的基本用法。
Express
Express是基于 Node.js 平台,快速、开放、极简的 web 开发框架。是建立在http模块上,核心是对http模块的再包装,相当于是再http模块上加了一个中间层。
Express的安装
express实际上实际上就是一个包,直接使用包管理工具的安装方式即可,这里我们就以npm为例,安装命令如下:
npm init
npm i express
这时我们可以发现有了一个node_modules文件夹,并且这个文件夹多了很多文件。
要查看express是否安装成功,可以使用下面的命令查看。 需要注意的是从express4.0版本之后,express便将命令工具分出来了,需要首先安装一个命令工具,命令如下:
npm install -g express-generator
然后再输入查看版本信息的命令:
express --version
效果如下:
express运行原理
Express框架相当于是在http模块上加了一个中间层(中间件)。
我们在之前的http模块中创建一个服务的时候,代码是这样的。
const http = require('http');
const server = http.createServer((req, res) => {
res.write('ok');
res.end('ok');
});
server.listen(3000);
现在有了express之后,我们可以将上述代码改成这样:
const express = require('express');
const app = express();
app.get('/', (req, res) => {
res.send('hello express');
});
app.listen(3000);
效果如下:
中间件就是处理http请求的函数。一个中间件处理完,再传递给下一个中间件。App实例在运行过程中,会调用一系列的中间件。
每个中间件可以从App实例,接收三个参数,依次为request对象(代表Http请求),response对象(代表HTTP回应),next回调函数(代表下一个中间件)。每个中间件都可以对HTTP请求(request对象)进行加工,并且决定是否调用next方法,将request对象再传给下一个中间件。
Express路由用法
1. 路由
路由表示应用程序端点 (URI) 的定义以及响应客户端请求的方式。是由一个URI、HTTP请求(GET、POST等)和若干个句柄组成。它的结构如下:
app.methods(path, callback);
- app是express对象的一个实例。
- method是一个HTTP请求方法。
- path是服务器上的路径。
- callback是当路由匹配时要执行的函数。
app.get('/', (req, res) => {
res.send('hello express');
});
2. all方法
app.all('*', (req, res, next) => {
res.send('hello express');
next();
});
all方法表示,所有请求都必须通过该中间件。
3. 获取请求参数
express中提供了很多方法可以直接获取请求参数。
req.query
req.query用来获取接口请求中拼接在路径'?'后边的参数。并且会自动将参数转换为对象形式返回。
const express = require('express');
const app = express();
app.get('/test?name=Tom&age=18', (req, res) => {
console.log('参数', req.query);
res.send('hello express');
});
app.listen(3000);
req.body
req.body获取post请求的表单数据。
app.post('/test', (req, res) => {
console.log('body', req.body);
res.send('hello express');
});
除此之外还有其他的用法
app.post('/test', (req, res) => {
console.log(req.method);
console.log(req.url);
console.log(req.httpVersion);
console.log(req.headers);
console.log(req.path);
console.log('body', req.body);
res.send('hello express');
});
4. 获取路由参数
req.params用于在url链接上传递数据参数,需要后台接口用==:变量名==的写法发起请求。
app.get('/test/num:num', (req, res) => {
console.log('参数', req.params);
res.send('hello express');
});
express响应设置
express上提供了很多关于响应设置的方法。
- res.download(): 提示要下载的文件
- res.end(): 结束响应进程
- res.json(): 发送JSON响应
- res.jsonp(): 发送带有JSONP支持的JSON响应
- res.direct(): 重定向请求
- res.render(): 渲染视图模板
- res.send(): 发送各种类型的响应
- res.sendFile(): 将文件作为八位字节流发送
- res.sendStatus(): 设置响应状态代码,并将其字符串表示形式发送为响应正文
app.post('/test', (req, res) => {
res.statusCode = 404;
res.statusMessage = 'xxx';
res.setHeader('abc','xyz');
res.write('响应体');
res.end('xxx');
res.status(500); //设置响应状态码
res.set('xxx','yyy');//设置响应头
res.send('中文响应不乱码');//设置响应体
//连贯操作
res.status(404).set('xxx','yyy').send('你好朋友')
res.redirect('http://atguigu.com')//重定向
res.download('./package.json');//下载响应
res.json();//响应 JSON
res.sendFile(__dirname + '/home.html') //响应文件内容
});