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

Node.js中TypeError: res.send is not a function报错问题求助

解决Node.js原生http模块中res.send is not a function的错误

这个问题很常见——你现在用的是Node.js原生的http模块,但res.send()并不是原生响应对象的方法,它是Express这类Web框架提供的便捷API。下面给你两种可行的解决思路:

方案一:继续使用原生http模块,改用res.end()发送响应

原生http模块的响应对象(res)需要用res.end()来完成响应的发送和连接的关闭,同时你可以用res.writeHead()来设置状态码和响应头。修改后的代码如下:

var url = require('url');
var http = require('http');

http.createServer(function (req, res) {
  var url_parts = url.parse(req.url, true);
  var q = url_parts.query;
  console.log(q.query); // 注意:只有当请求URL包含?query=xxx这类参数时,q.query才有值,否则会是undefined

  // 一次性设置HTTP状态码和响应头
  res.writeHead(200, { 'Content-Type': 'application/json' });
  // 发送JSON数据并结束响应
  res.end(JSON.stringify({ a: 1 }));
  console.log(q.query);
}).listen(8080);

这里要注意:res.end()是原生http模块结束响应的标准方式,必须调用它来告诉服务器响应已完成,否则客户端会一直处于等待状态。

方案二:改用Express框架(推荐,更适合Web开发)

如果你后续要开发更复杂的Web服务,Express框架能帮你省去很多原生模块的繁琐操作,res.send()就是它提供的便捷方法之一。

步骤1:安装Express

在项目目录下执行命令:

npm install express

步骤2:修改代码为Express版本

const express = require('express');
const url = require('url');
const app = express();

app.get('*', function (req, res) {
  var url_parts = url.parse(req.url, true);
  var q = url_parts.query;
  console.log(q.query);

  // Express的res.send会自动处理JSON序列化和Content-Type设置
  res.send({ a: 1 });
  console.log(q.query);
});

app.listen(8080);

用Express的话,你还能轻松处理路由、中间件等Web开发常见需求,比原生http模块效率高很多。

另外提个小细节:你的代码里console.log(q.query),如果请求URL没有携带query这个参数(比如只是http://localhost:8080/),这个值会是undefined,如果想查看所有查询参数,可以改成console.log(q)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:10:31