node.js - Vuejs SPA + Nodejs API 的 CORS 问题

标签 node.js vue.js cors vue-resource

我有一个设置作为标题,在我的 Nodejs Express 应用程序中安装了 cors npm。此外,在托管我的 Nodejs 应用程序的 nginx 上启用了基本身份验证。 (身份验证只需要在每个请求的 header 中附加一个“授权” key )。

我的nodejs入口文件(带有cors):

var express = require('express');
var bodyParser = require('body-parser');
var morgan = require('morgan');
var routes = require('./routes');
var cors = require('cors');

var app = express();
var port = process.env.PORT || 3000

app.set('view engine', 'ejs');

app.use('/assets', express.static('./public'))
app.use(bodyParser.json({limit: '50mb'}));
app.use(morgan('dev'));
app.use(cors({
    origin: 'http://localhost:8080',
    credentials: true,
    allowedHeaders: ['Content-Type', 'Authorization']
}));
app.options('*', cors());
routes.init(app);

app.listen(port, function() {
    console.log(`Express running on ${port}`)
})

我的 vuejs main.js 文件,其中设置了 vue-resource 来处理 API 调用:

import Vue from 'vue'
import App from './App'
import router from './router'
import VueResource from 'vue-resource'

Vue.config.productionTip = false

Vue.use(VueResource)

if(process.env.NODE_ENV === 'production') {
    Vue.http.options.root = 'http://api.server.net'
    Vue.http.interceptors.push((request, next) => {
        request.headers.set('Authorization', 'Basic xxxxx')
        next()
    })
}

new Vue({
    el: '#app',
    router,
    components: { App },
    template: '<App/>'
})

完成上述操作后,我收到此错误“对预检请求的响应未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin” header 。”

更多观察结果:

- 使用 postman 调用 API 并将授权 key 附加到请求 header 可以正常工作。 (了解 postman 不受 CORS 问题的影响,只是为了证明授权 key 有效)。然而,在 postman 中,响应 header 没有 ACCESS-CONTROL-ALLOW-ORIGIN 键。当我在 chrome devtools 中检查响应头时也是如此。

-使用 Chrome 开发工具,我还注意到请求 header 中没有授权 key 。

有人能指出我正确的方向吗?

编辑:格式

最佳答案

我找到了答案(以防其他人面临类似的问题)。

运行nodejs的nginx服务器在OPTIONS请求中需要授权 key ,这就是问题背后的原因。

关于node.js - Vuejs SPA + Nodejs API 的 CORS 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48964441/

相关文章:

http - 为什么同源策略不阻止 POST 请求?

javascript - Firefox 3 CORS XMLHTTPRequest 似乎不起作用

node.js - 将 SQL Server CE 与 node-webkit 结合使用

https - 带有客户端https证书的CORS

node.js - 发送数据到指定的socket

ajax - 如何延迟挂载的事件

vue.js - 为什么 vue watch 只触发一次?

javascript - v-for 的 VueJS forceUpdate 不工作

css - lambda 上的 Phantom JS 坏字距调整自定义字体

javascript - Nodejs 后面写的连接套接字如何保存?