解决node中跨域、中间件、重定向 问题

重定向

重定向就是当访问一个页面时找不到此页面,就会重定向到一个指定页面

  • 设置响应头为: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写法

猜你喜欢

转载自blog.csdn.net/CSDNzhaojiale/article/details/107191572
今日推荐