【发布时间】:2021-10-10 05:16:40
【问题描述】:
我刚刚开始学习 Node.js,现在,我正在尝试通过 cPanel 使用 Node.js 应用程序,以便在访问其应用程序的 URL 时提供 JSON 响应。
访问应用程序的 URL 时,很明显 Node.js 服务器正在正常工作。因此,在编辑主 JS 文件并重新启动 Node.js 应用程序后,再次访问 URL 时会反映更改。
我的问题:
在https.createServer( function (req, res) {}); 的函数中,我想向其他地方的 PHP 文件发出 HTTPS 请求,该文件返回 JSON 响应。目前,我什至无法从任何类型的 PHP 文件请求中得到响应或错误。
var https = require('https');
var server = https.createServer(function (req, res) {
var message = "";
res.writeHead(200, {
'Content-Type': 'text/plain'
});
var options = {
host: "mydomain.com",
path: '/myPhpScript.php'
};
https.get(options, function(res) {
var bodyChunks = [];
res.on('data', function(chunk) {
bodyChunks.push(chunk);
}).on('end', function() {
var body = Buffer.concat(bodyChunks);
message += body;
})
}).on('error', function(e) {
message += e;
});
res.end(message);
});
server.listen();
如您所见,message 将显示在浏览器窗口中,但它是空的。访问 App URL 时没有显示任何内容。是否可以使用 Node.js HTTPS 服务器发出 HTTPS 请求?
注意:
我也试过 native-request 和 axios 并遇到了同样的问题。
【问题讨论】:
-
当您从浏览器访问 php url 时会发生什么?它是否返回您想要的内容?这是节点中的 http(s) 请求的问题吗?您是否尝试过其他网址,例如
https://example.com?在您的服务器代码中,您无需等待请求完成,而是立即发送一条空消息。在“结束”事件回调中移动res.end()。 -
@Marc 感谢您的评论。 PHP URL 返回它应该返回的内容。 res.end(message) 是我代码中的倒数第三行。当我玩过这个服务器函数时,我可以让响应结束并显示一条消息,而不是特别是我应该从 PHP 文件中获取的 JSON 响应。
-
没有任何数据/块您想要/需要的东西很难帮助您。 (或真实的例子)。顺便提一句。您将响应标头设置为“text/plain”,为什么不设置“application/json”?
-
@Marc jarrenmorris.com/gamesense/r6_db/1.json 例如。 JSON到底是什么并不重要,但无论是返回JSON的php脚本还是实际的json文件本身,我都会得到相同的结果。使用我拥有的当前代码,我的浏览器只是说请求超时。响应头现在是“text/plain”,因为我使用消息变量来输出其他信息以进行调试。
标签: javascript node.js https cpanel