重定向
重定向就是当访问一个页面时找不到此页面,就会重定向到一个指定页面
- 设置响应头为:302
- 重新设置Location,指向一个重定向页面
- 结束响应
//app为express创建的服务器
app.use((req, res) => {
// 设置302响应头
res.writeHead(302, {
Location: 'http://127.0.0.1:4399/login.html'
})
//结束响应
res.end()
})
中间件
中间件就是在响应接口之前执行一个或多个函数,next()为执行下一个中间件,没有next()页面就会挂起
- 执行任何代码。
- 更改请求和响应对象。
- 结束请求-响应周期。
- 调用堆栈中的下一个中间件。
app.use((req, res, next) => {
req.happy = 'i am very happy'
next()
})
app.use((req, res, next) => {
console.log('我是在执行接口前完成的')
next()
})
跨域
- 为什么会产生跨域
- 浏览器做了保护机制,不让不同源的访问
- 什么是跨域
- 浏览器使用ajax时, 如果请求了的接口地址和当前打开的页面地址不同源称之为跨域
- 什么是同源
- 两个url ,协议与主机和端口均一致是同源
- 期中任何一个不同就不是同源
解决跨级
一、使用cors(设置响应头允许资源共享)
在服务器接口加res.setHeader('Access-Control-Allow-Origin', '*')
//服务器中的登录接口
app.post('/login', (req, res) => {
// 设置响应头,允许资源被访问/共享(让浏览器不保护)
res.setHeader('Access-Control-Allow-Origin', '*')//*表示所有的请求路径都可以请求这个接口
})
但是不能每个接口中都写这么一句话啊,解决方法:第三方模块cors
- 利用中间件每次访问接口时都允许资源共享
使用方法:app.use(cors())
二、jsonp是通过前后端配合来完成的
使用原理:通过动态创建script标签通过script标签的src请求没有跨域限制来获取资源
三、在发送ajax时,把dataType写成jsonp就可以解决跨域问题
前提是后端支持jsonp写法