广告位联系
返回顶部
分享到

Nodejs如何解决跨域(CORS)

JavaScript 来源:互联网 作者:佚名 发布时间:2023-01-20 21:42:22 人浏览
摘要

Nodejs解决跨域(CORS) 前后端分离的大环境下,受制于同源策略,我们需要懂得实现CORS(Cross-Origin Resource Sharing) 手动配置 在nodejs中,req 和 res 参数在中间件间都指向同一对象,这样我们

Nodejs解决跨域(CORS)

前后端分离的大环境下,受制于同源策略,我们需要懂得实现CORS(Cross-Origin Resource Sharing)

手动配置

在nodejs中,req 和 res 参数在中间件间都指向同一对象,这样我们就可以在头中间件中修改res 的header。如下:

1

2

3

4

5

6

7

8

const express = require('express')

  

const app = express();

  

app.use((req, res) => {

    //在这里手动配置

    res.header('Access-Control-Allow-Origin', 'example.com');

})

CORS模块

我们也可以通过引入cors模块快速配置。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

npm i cors --save   //不是node的内置模块,需要先下载

 

const express = require('express')

const cors = require('cors')

  

const app = express();

  

const corsConfig = {

  origin:'http://localhost:8080',

  credentials:true,

}

//使用默认

app.use(cors())

//或修改默认配置

app.use(cors(corsConfig)) 

axios

值得注意的一点是cors模块会将 Access-Control-Allow-Origin 默认配为 *,但是axios不接受通配符*。而且axios还需要 Access-Control-Allow-Credentials 属性为true。

Credentials我们可以手动配置,Access-Control-Allow-Origin 我们可以如下配置 :

1

2

3

4

5

6

7

8

9

10

11

12

13

const express = require('express')

const cors = require('cors')

  

const app = express();

  

//使用默认

app.use(cors())

   .use((req, res, next) => {

        console.log(req);

        res.setHeader('Access-Control-Allow-Origin',req.origin),

        next()

    })

//req.origin是网关地址 如:http://192.168.1.1 

注意:本地调试的时候axios不认为 localhost:8080 等于127.0.0.1:8080

Nodejs CORS跨域问题

在响应头里设置:'Access-Control-Allow-Origin': '*'

index.html

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

<!DOCTYPE html>

<html lang="en">

 

<head>

    <meta charset="UTF-8">

    <meta http-equiv="X-UA-Compatible" content="IE=edge">

    <meta name="viewport" content="width=device-width, initial-scale=1.0">

    <title>cors</title>

</head>

 

<body>

    <script>

        // 请求地址

        fetch('http://localhost:3000/api/data')

            // 请求体解析

            .then(res => res.json())

            // 获得数据

            .then(result => console.log(result))

    </script>

</body>

 

</html>

server.js

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

const http = require('http');

const libUrl = require('url')

 

http.createServer((req, res) => {

    const url = libUrl.parse(req.url, true);

 

    if (url.pathname === '/favicon.ico') return;

 

    if (url.pathname === '/api/data') {

        res.writeHead(200, {

            'Content-Type': 'Application/json',

            // 设置允许所有端口访问

            'Access-Control-Allow-Origin': '*'

        });

        let obj = {

            name: '张三',

            age: 20,

            sex: '男'

        };

        res.write(JSON.stringify(obj));

    }

    res.end();

}).listen(3000)


版权声明 : 本文内容来源于互联网或用户自行发布贡献,该文观点仅代表原作者本人。本站仅提供信息存储空间服务和不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权, 违法违规的内容, 请发送邮件至2530232025#qq.cn(#换@)举报,一经查实,本站将立刻删除。
原文链接 : https://blog.csdn.net/Doug_/article/details/123428376
相关文章
  • js日期格式化yyyy-MM-dd问题

    js日期格式化yyyy-MM-dd问题
    js日期格式化yyyy-MM-dd 方法一 1 2 3 4 5 6 7 8 9 10 11 12 13 function formatDate(date) { console.log(date); // date = new Date(); date = new Date(Date.parse(date.replace(/-/g
  • Nodejs如何解决跨域(CORS)
    Nodejs解决跨域(CORS) 前后端分离的大环境下,受制于同源策略,我们需要懂得实现CORS(Cross-Origin Resource Sharing) 手动配置 在nodejs中,req 和
  • JS图形编辑器场景坐标视口坐标的相互转换

    JS图形编辑器场景坐标视口坐标的相互转换
    图形编辑器的坐标系有两种。 一个是场景(scene)坐标系,一个是视口(viewport)坐标系。视口就是场景的一个子区域。 假设我们的视口的
  • JS图形编辑器实现标尺功能

    JS图形编辑器实现标尺功能
    项目地址: https://github.com/F-star/suika 线上体验: https://blog.fstars.wang/app/suika/ 标尺指的是画布上边和左边的两个有刻度的尺子,作用让用户知
  • JS快速检索碰撞图形之四叉树碰撞检测

    JS快速检索碰撞图形之四叉树碰撞检测
    在上篇文章我们讨论了使用脏矩形渲染,通过重渲染局部的图形来提优化 Canvas 的性能,将 GPU 密集转换为 CPU 密集。 CPU 密集在哪? 在需要
  • three.js简单实现类似七圣召唤的掷骰子

    three.js简单实现类似七圣召唤的掷骰子
    1基本工作 笔者利用业余时间自学了three.js。为了更好的了解WebGL以及更熟练的使用three,想模仿原神中的小游戏七圣召唤中的投掷骰子效果,
  • JS技巧多状态页面中的mock方案介绍

    JS技巧多状态页面中的mock方案介绍
    我们有时候会遇到一个业务页面存在很多个状态,甚至子状态,比如订单详情就是其中的典型,涉及从订单创建到订单结束,以及售后等流
  • Node如何实现在浏览器预览项目的所有图片介绍

    Node如何实现在浏览器预览项目的所有图片介绍
    背景 在前端实际项目开发中,会有这样一种场景。每次引入新的图片,并不知道这个资源是否被引用过,所以会点开存放图片的资源一个个
  • bigScreen大屏配置选项无法和画布中心的展示联动

    bigScreen大屏配置选项无法和画布中心的展示联动
    问题1. 大屏的配置选项无法和画布中心的展示联动 解决过程: 大概找了2天时间,各种排查数据绑定的问题?文件传参的问题?找的过程中
  • react后台系统最佳实践介绍
    本文主要讲三块内容:中后台系统的技术栈选型、hooks时代状态管理库的选型以及hooks的使用问题与解决方案。 1. 要做什么 我们的目标是搭
  • 本站所有内容来源于互联网或用户自行发布,本站仅提供信息存储空间服务,不拥有版权,不承担法律责任。如有侵犯您的权益,请您联系站长处理!
  • Copyright © 2017-2022 F11.CN All Rights Reserved. F11站长开发者网 版权所有 | 苏ICP备2022031554号-1 | 51LA统计