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
相关产品推荐
相关产品推荐

