我想设置一个节点服务器,在一个端点内,可以向同一服务器中的另一个端点发出GET请求。
我的测试代码如下:
const express = require('express');
const app=express();
const https=require("https");
const port=1337;
app.listen(port,()=>{
console.log('live on port '+port);
});
app.get('/',function(req,res){
res.send('Homepage here');
var url="localhost/test?param=abcde";
https.get(url,res=>{
body=JSON.stringify(res);
console.log(body);
});
});
app.get('/test',(req,res)=>{
var response=req.param;
console.log(response);
res.send(response);
});
当用户转到主页面时,它应该向/test
发送一个GET请求,该请求返回param
指定的值。但是,当我打开页面时,我在控制台上收到此错误:
Error: Unable to determine the domain name
如果我设置
,也会发生这种情况var url="./test?param=abcde";
或
var url="/test?param=abcde";
用于访问同一.js
服务器文件中的另一个端点的正确URL是什么?这是将GET参数传递到该端点并将结果返回给调用端点的正确方法吗?
注意:它与this question有类似的问题,但是似乎没有发布可行的解决方案,除非this response中有一些有用的东西我忽略了。
答案 0 :(得分:1)
我有三个问题。
首先,
端口似乎是1337,所以不应该请求var url="localhost:1337/test?param=abcde";
而不是var url="localhost/test?param=abcde";
其次,您使用https
还是http
?
如果是http,请使用http
module代替https
。
第三,它是GET
请求,?param=abcde
是一个查询参数,因此更改为
var response=req.query;
代替var response=req.param;
http://expressjs.com/ja/api.html#req.query
我修改了代码(在我的本地环境中,这可行)。
我使用http
模块,因为在我的本地环境中https
不受支持。但是如果你使用twilio,you may use https
const express = require('express');
const app=express();
const http=require("http");
const port=8080;
app.listen(port,()=>{
console.log('live on port '+port);
});
app.get('/',function(req,res){
res.send('Homepage here');
var url="http://localhost:8080/test?param=abcde";
var req = http.request(url,res=>{
// comment out, because in my environment this causes error
// body=JSON.stringify(res);
// console.log(body);
res.on('data', (chunk) => {
console.log(`BODY: ${chunk}`);
});
});
req.end();
});
app.get('/test',(req,res)=>{
console.log('route /test')
var response=req.query;
console.log(response);
res.send(response);
});
输出:
live on port 8080
route /test
{ param: 'abcde' }
BODY: {"param":"abcde"}
答案 1 :(得分:-1)
您应该在第一个地址中使用 http 或 https
var url="http://localhost/test?param=abcde"
// Or
var url="https://localhost/test?param=abcde"