node.js 错误 - throw new TypeError('first argument must be a string or Buffer');
Posted
技术标签:
【中文标题】node.js 错误 - throw new TypeError(\'first argument must be a string or Buffer\');【英文标题】:node.js Error - throw new TypeError('first argument must be a string or Buffer');node.js 错误 - throw new TypeError('first argument must be a string or Buffer'); 【发布时间】:2012-05-15 06:08:06 【问题描述】:我正在尝试在 node.js 中实现一个基本的加法程序,它通过 URL(GET 请求)接受 2 个数字,将它们加在一起,并给出结果。
var http = 要求(“http”); var url1 = 需要("url"); http.createServer(函数(请求,响应) response.writeHead(200, "Content-Type": "text/plain"); var path = url1.parse(request.url).pathname; 如果(路径==“/添加”) console.log("收到添加请求\n"); var urlObj = url1.parse(request.url, true); var number1 = urlObj.query["var"]; var number2 = urlObj.query["var2"]; var num3 = parseInt(number2); var num4 = parseInt(number1); var tot = num3 + num4; response.write(tot); response.write(number1 + number2); 别的 response.write("无效请求\n"); response.end(); ).听(8889); console.log("服务器已启动。");当我运行时,我在控制台中收到“服务器已启动”消息。但是当我请求网址时
`http://localhost:8889/addition?var=1&var2=20`
我收到以下错误:
http.js:593 throw new TypeError('第一个参数必须是字符串或缓冲区');
当我注释掉显示变量“tot”的行时,代码正在运行,我得到的输出是我传递的 2 个 get 参数的串联值。在这种情况下,它恰好是 1+20 = 120。 我无法将数据转换为数字格式。
代码中的错误在哪里?错误信息的基本含义是什么?
提前非常感谢。
【问题讨论】:
请注意,错误消息还应该包含文本(假设代码保存为 server.js): at Server. (server.js:21:18)问题在第 21 行。这有助于快速找到问题。 【参考方案1】:当它们应该是字符串时,您将数字传递给 response.write。像这样:
response.write(total + '');
变量 total 包含数字 21,因为您在求和之前通过 parseInt() 传递了查询参数。通过 response.write 发送时将导致错误,除非您首先通过将空字符串附加到字符串来转换为字符串。 number1+number2 是可以的,因为它们是字符串,但是它们的“和”是“120”。
我建议也查看 node.js 包“express”。它处理了 HTTP 服务器的许多基础知识,因此您可以编写如下:
var express=require('express');
var app=express.createServer();
app.get('/add',function(req,res)
var num1 = parseInt(req.query.var);
var num2 = parseInt(req.query.var2);
var total = num1 + num2;
res.send(total + '');
);
app.listen(8888);
【讨论】:
成功了!从来不知道“快递”。谢谢! :)以上是关于node.js 错误 - throw new TypeError('first argument must be a string or Buffer');的主要内容,如果未能解决你的问题,请参考以下文章
安装npm后,nrm ls 报错internal/validators.js:124 throw new ERR_INVALID_ARG_TYPE(name, ‘string‘, value)(代码片
Node.js assert.throws 带有异步函数(Promises)
Node.js events.js: 163 throw er;使用标志 --runInBand 执行 Jest 时