我是 NODE JS + GAE 的新手,所以请原谅新手的问题。
我希望我的应用程序提供 REST 调用,该调用将合并对其他外部托管 API 的调用结果(第三方 - 无 GAE)
我有这个 javascript 在我的 PC 上运行,但是当我部署到 GAE 时,我收到"502 错误网关"错误(在我的浏览器中)。我在 GAE 日志中找不到任何内容来帮助解释此错误。请注意,我的 REST 呼叫正在工作(即 GAE 正在接收呼叫),但无法对外部网站进行出站调用。
请注意,这是失败的示例 NODE JS 代码(我调用"/test"):
const express = require('express');
var http = require('http');
var XMLHttpRequest = require("xmlhttprequest").XMLHttpRequest;
const app = express();
// [START hello_world]
app.get('/test', (req, res) => {
const Http = new XMLHttpRequest();
const url='https://www.google.com';
Http.open("GET", url);
Http.send();
Http.onreadystatechange=(e)=>{
console.log(Http.responseText)
}});
// [END hello_world]
if (module === require.main) {
// [START server]
// Start the server
const server = app.listen(process.env.PORT || 8080, () => {
const port = server.address().port;
console.log(`App listening on port ${port}`);
});
// [END server]
}
module.exports = app;
从我的浏览器运行需要一段时间(即一分钟),然后我收到"502 Bad Gateway"错误。我这是一个跨站点问题,即 GAE 是否阻止从 NODE JS 应用程序到其他站点的 Web 服务调用?
问题是您的请求超时,因为您没有发送任何指示请求已完成的响应。
要解决此问题,您需要在/test
处理程序上返回响应,例如,您可以添加以下内容:
res.status(200).send("ok").end();
它返回对请求的200 OK
响应,指示它已被正确处理。
在/test
处理程序中,此更改可能应按以下方式添加:
app.get('/test', (req, res) => {
const Http = new XMLHttpRequest();
const url='https://www.google.com';
Http.open("GET", url);
Http.send();
Http.onreadystatechange=(e)=>{
console.log(Http.responseText)
// Return response to '/test' handler request
res.status(200).send("ok").end();
}
});