我正在try 将请求从一个本地主机端口发送到另一个本地主机端口.我用angularjs on the frontend and node on the backend.

因为它是CORS个请求,在 node 中.js,我在用

res.header('Access-Control-Allow-Origin', '*');
res.header('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, PATCH');
res.header('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type, Accept, Authorization');

在Angular 上.js服务文件,我正在使用

return {
    getValues: $resource(endpoint + '/admin/getvalues', null, {
        'get': {
             method: 'GET',
             headers:{'Authorization':'Bearer'+' '+ $localStorage.token}
             }
     }),
}

我得到以下错误

Request header field Authorization is not allowed by Access-Control-Allow-Headers in preflight response.

请帮忙!

推荐答案

您还必须在允许的标题中添加选项.浏览器在发送原始请求之前发送飞行前请求.见下文

 res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,PATCH,OPTIONS');

来源https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/OPTIONS

在CORS中,发送带有选项方法的飞行前请求,以便服务器可以响应是否可以使用这些参数发送请求.Access-Control-Request-Method报头作为飞行前请求的一部分通知服务器,当实际请求被发送时,它将使用POST请求方法发送.Access-Control-Request-Headers报头通知服务器,当实际请求被发送时,它将与X-PINGOTHERContent-Type自定义报头一起发送.服务器现在有机会确定在这些情况下是否希望接受请求.

EDITED

您可以通过使用npmjs.com/package/corsNPM软件包来避免这种手动配置.我也用过这个方法,它清晰易懂.

Node.js相关问答推荐

如何使用jq将依赖项添加到package.json中

如何使用MongoDB在Node.js 中向数组中添加项?

ForbidenError:使用Express.js的CSRF令牌无效

如何创建具有不同对象类型的数组类型

Google App Engine 突然不允许我部署我的 node.js 应用程序

看起来这段代码try GET 请求发送的值变为空白

当我try 从本地主机发布新产品时收到错误消息

更新文档数组中的文档 Mongoose

使用 Forms API 进行批量更新时生成 itemId

Google Calendar API FreeBusy 外部用户

FirebaseCloudMessaging : PlatformException (PlatformException(null-error, Host platform returned null value for non-null return value., null, null))

在数组的另一个对象中获取数组的mongoose 对象

Cassandra node.js 驱动程序有替代品吗?

使用服务帐户将 Firebase 应用程序部署到 Heroku(使用 dotenv 的环境变量)

在本地运行 Cloud Functions 会出现错误functions.config() 不可用

Connect/Express 中的session和cookieSession中间件有什么区别?

如何使用 Node.js 将 base64 编码图像(字符串)直接上传到 Google Cloud Storage 存储桶?

如何在 node 中找到引用站点 URL?

node.js 模块和函数中this的含义

在 Jade 包含中使用变量