You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js同服务器端点内发起GET请求的URL及参数传递问题

解决同一Express服务器内端点调用的问题

我来帮你梳理下代码里的问题,以及正确的实现方式:

首先说你遇到的「Unable to determine the domain name」错误原因

你用了https模块,但你的服务器是普通的HTTP服务器(没配置HTTPS证书),而且URL格式不完整——https.get需要带协议、主机、端口的完整URL,不能只写localhost/test或者相对路径。另外,本地测试用http模块就够了,不用https。

然后是参数获取的错误

你用的req.param已经被废弃了,Express里获取GET请求的查询参数,应该用req.query.param(req.query是存储所有GET参数的对象)。

正确的实现方式分两种:

方式1:用HTTP请求调用同一服务器的端点(适合跨服务调用的场景,本地同服务其实没必要)

修正后的代码如下:

const express = require('express');
const app = express();
const http = require("http"); // 换成http模块,因为没配置HTTPS
const port = 1337;

app.listen(port, () => {
  console.log('live on port ' + port);
});

app.get('/', function(req, res) {
  // 必须用完整的URL:协议+主机+端口+路径+参数
  const url = `http://localhost:${port}/test?param=abcde`;
  
  http.get(url, (response) => {
    let body = '';
    // 响应是流,需要拼接数据块
    response.on('data', chunk => {
      body += chunk;
    });
    // 响应结束后处理结果
    response.on('end', () => {
      console.log('从/test拿到的数据:', body);
      res.send(`主页在这里,从/test获取到的数据:${body}`);
    });
  }).on('error', (err) => {
    console.error('调用/test出错:', err.message);
    res.status(500).send('获取/test数据失败');
  });
});

app.get('/test', (req, res) => {
  // 用req.query获取GET参数
  const paramValue = req.query.param;
  console.log('收到的param参数:', paramValue);
  res.send(paramValue);
});

方式2:直接调用处理函数(同服务内最优方案)

其实同个服务器里的端点,没必要发起HTTP请求,直接把/test的逻辑抽成独立函数,在/端点里调用就行,效率更高,还能避免网络错误:

const express = require('express');
const app = express();
const port = 1337;

app.listen(port, () => {
  console.log('live on port ' + port);
});

// 把/test的业务逻辑抽成独立函数
function processTestParam(reqQuery) {
  const paramValue = reqQuery.param;
  console.log('收到的param参数:', paramValue);
  return paramValue;
}

app.get('/', function(req, res) {
  // 直接调用函数,模拟req.query传入参数
  const testResult = processTestParam({ param: 'abcde' });
  console.log('从测试逻辑拿到的数据:', testResult);
  res.send(`主页在这里,从测试逻辑获取到的数据:${testResult}`);
});

app.get('/test', (req, res) => {
  const result = processTestParam(req.query);
  res.send(result);
});

对你问题的直接解答:

  1. 正确的URL格式:必须是完整的http://localhost:1337/test?param=abcde(如果配置了HTTPS才用https://);
  2. 参数传递和返回的方式:原来的方式不对,参数要通过req.query获取,而且处理HTTP响应时要监听流的data和end事件来拼接响应体。同服务内更推荐直接调用处理函数的方式,既高效又避免网络问题。

内容的提问来源于stack exchange,提问作者sigil

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:37:20