如何在Node中的另一个端点上发出GET请求?

时间:2018-01-07 09:10:02

标签: node.js express https get

我想设置一个节点服务器,在一个端点内,可以向同一服务器中的另一个端点发出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中有一些有用的东西我忽略了。

2 个答案:

答案 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"