1. 导入express
2. 创建web服务器
3. 启动web服务器
// 1. 导入express
const express = require('express')
// 2. 创建web服务器
const app = express()
// 4.监听客户端的GET和POST请求, 并且向用户响应具体内容
app.get('/user', (req, res) => {
res.send('请求成功')
})
app.post('/user', (req, res) => {
// 调用express提供res.send方法,向客户端响应一个JSON对象
res.send({name:'ly', age: 18})
})
// 3. 启动web服务器
app.listen(8080, () => {
console.log(`app listening`);
})
注意: express在指定的静态目录中查找文件,并对外提供资源的访问路径,因此,存放静态文件的目录名不会出现在url中。
路由:客户端请求与服务器处理函数之间的映射关系。
创建模块化路由:
1. 导入express
2. 创建web服务器
(1. 导入路由模块
2. 注册路由模块)
3. 启动服务器
路由模块:
本质上也是一个function处理函数。
注意: 中间件函数的形参列表中, 必须包含next参数。而路由处理函数只包含req和res。
next()实现多个中间件连续调用,表示把流转关系转交给下一个中间件或路由。
通过app.use()将中间件函数注册为全局生效的中间件。
中间件作用: 多个中间件之间,共享同一份req和res。基于这样特性,在上游中间件中,统一为req和res对象自定义添加属性和方法,则下游中间件或路由就可以使用。
// 导入express
const express = require('express')
const app = express()
// 定义中间件
app.use((req, res, next) => {
console.log('第一个中间件');
next()
})
app.use(function(req, res, next) {
console.log('第二个中间件');
next()
})
// 定义路由
app.get('/', (req, res) => {
res.send('hhh')
})
app.listen(80, () => {
console.log('serve running');
})
注意事项:
- 必须在路由之前 注册中间件
- 客户端发送过来请求,可以连续调用多个中间件
- 执行完中间件业务代码之后,要调用next() 函数
- next()函数后面不要额外写代码
- 多个中间件中,共享req和res
const express = require('express')
const app = express()
// 定义一个路由
app.get('/', (req, res) => {
// 人为抛出异常
throw new Error('服务器出错!!')
res.send('hhh')
})
// 定义一个错误中间件,捕获项目异常,防止程序崩溃
app.use((err, req, res, next) => {
console.log('发生了错误' + err.message);
res.send('Error' + err.message)
})
app.listen(80, () => {
console.log('serve running');
})
错误中间件必须注册在路由之后
express内置的中间件
第三方的中间件
编写接口:
1. 创建express服务器
2. 创建API路由模块
3. 编写get, post等接口
get,post接口会出现跨域问题。
使用cors中间件解决跨域问题:
1. 下载第三方库 npm install cors 安装中间件
2. const cors = require('cors') 导入中间件
3. 调用app.use(cors())配置中间件
cors由一系列http响应头组成,这些http响应头决定浏览器是否阻止前端JS代码跨域获取资源。
cors在服务器端进行配置。
cors在浏览器中有兼容性。
cors响应头部: -Access-Control-Allow-Origin
响应头部携带一个-Access-Control-Allow-Origin : | * 字段 // origin参数指定了允许访问该资源的外域URL, *通配符,表示任意URL都通过。
res.setHeader(‘-Access-Control-Allow-Origin’,‘http://nim.cn’)
cors响应头部: -Access-Control-Allow-Headers
cors响应头部: -Access-Control-Allow-Methods 指明实际请求所允许使用的http方法。 —cors仅支持GET、POST、HEAD请求。
客户端在请求CORS接口时,根据请求方式和请求头的不同,可以将cors请求分为两大类:
简单请求
预检请求:
在浏览器和服务器之间进行通信之前,浏览器会发送OPTION请求进行预检,以获知服务器是否允许该实际请求,所以这一次的OPTION请求称为”预检请求“。服务器成功响应预检请求后,才会发送真正的请求,并且携带真实数据。
满足任意一个条件,都需要进行预检请求:
- 请求方式为GET,POST,HEAD之外的请求method类型。
- 请求头中包含自定义头部字段
- 向服务器发送application/json格式的数据。
: 浏览器通过 script 标签的src属性,请求服务器上的数据,同时,服务器返回一个函数的调用。
必须在配置cors中间件之前,配置jsonp的接口。
实现JSONP接口步骤:
1. 获取客户端发送过来的回调函数名字。
2. 得到要通过JSONP形式发送给客户端的数据。
3. 根据前两步得到的数据,拼接出一个函数调用的字符串。
4. 上一步拼接的字符串,响应给客户端