使用 cors、express 和 google api 的 Node.js 服务器应用程序在 Azure 部署后无法正常工作

Posted

技术标签:

【中文标题】使用 cors、express 和 google api 的 Node.js 服务器应用程序在 Azure 部署后无法正常工作【英文标题】:Node.js server app using cors, express and google api not working after azure deployment 【发布时间】:2017-11-23 04:04:30 【问题描述】:

我有一个 node.js 服务器 api 应用程序在部署到 azure 后无法运行。

它最初依赖 google.api 来获取数据,然后将数据存储在一个数组中,并通过响应 express get 调用将其发送给客户端。

一开始我用的是:

const express = require('express');  
const app = express();  
const cors = require("cors");
const _ = require("lodash");
const port = 30000;

app.use(cors());

在本地主机上运行良好。

对于部署,按照教程后我将其更改为:

const express = require('express');  
const app = express();  
const cors = require("cors");
const _ = require("lodash");
const port = process.env.PORT || 80;
var http = require('http');

app.use(cors());

var server = http.createServer(app);
server.listen(port, function ()  
);

这没用,最后:

const express = require('express');  
const app = express(); 
const _ = require("lodash");
const port = process.env.PORT || 80;

var login = require('./routes/login');
...
app.use('/login', login);
...
module.exports = app;

并为 get 命令创建了一个新文件夹,就像这里所做的那样 https://github.com/Azure-Samples/app-service-web-nodejs-get-started/blob/master/app.js。

似乎没有任何效果,我继续收到错误:

GET http://nameofsite/login404(未找到)

XMLHttpRequest 无法加载站点名称/登录名。不 请求中存在“Access-Control-Allow-Origin”标头 资源。因此,Origin 'nameofclient' 不允许访问。这 响应的 HTTP 状态代码为 404。

我尝试在 Azure 门户中包含 cors 标头以及将客户端站点添加到 cors 允许的来源,但这没有任何区别。谁能帮助解决这个问题或提供有关如何使用来自 google 表格文档的信息正确格式化 node.js 服务器的信息?

【问题讨论】:

我不知道您的具体问题,但由于您使用的是 node.js ,我建议您使用指定的 API 包(如 npmjs.com/package/google-spreadsheet),而不是使用一些 CORS 魔法。但对我来说,这似乎更像是一个标题问题。出于测试目的,我建议你试试这个:app.use(function (req, res, next) res.header("Access-Control-Allow-Origin", "*"); res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept"); res.header('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, DELETE'); next(); ); 尝试安装 cors chorme 扩展,如果它可以工作,然后在代码级别进行更改 chrome.google.com/webstore/detail/allow-control-allow-origi/… Zsolt,我正在使用 google api (var google = require('googleapis'); etc.) 来处理与 google 电子表格的通信。我尝试添加你建议的 app.use.. 但它给出了相同的结果。我是否应该将它添加到每个快递电话中? @Adiii 我添加了 chrome 扩展,然后启动了 cors,非常感谢,但是,我仍然收到错误 GET http://server-api-url/login 404 (Not Found),它使我的 api 无法使用并阻碍我访问数据。 您是否将 node_modules 文件夹推送到 Azure? 【参考方案1】:

这可能是一个愚蠢的问题,但是当您将 VM 移至 Azure 时,您是否设置了 IP 地址、更新了外部 DNS 并配置了虚拟网络以允许 Node 和您的代码所需的正确流量?

【讨论】:

以上是关于使用 cors、express 和 google api 的 Node.js 服务器应用程序在 Azure 部署后无法正常工作的主要内容,如果未能解决你的问题,请参考以下文章

使用 cors、express 和 google api 的 Node.js 服务器应用程序在 Azure 部署后无法正常工作

在使用 node.js 和 Express 构建的 api 中使用 cors 中间件时出现 CORS 错误

无法使用 PUT 方法通过 CORS 和 Express 发送数据

在带有 Node 和 Express 的 IE10 中使用 CORS 的安全错误

Express 配置为使用 CORS 不接受 CORS

为啥我的 Express.js 后端的 CORS 设置不起作用?