如何从我的 NODEJS GAE APP 调用外部 Web 服务



我是 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();
        }
});

最新更新