我正在尝试在node.js中实现一个基本的附加程序,它通过URL接受2个数字(GET请求)将它们加在一起,然后给出结果。
var http = require("http"); var url1 = require("url"); http.createServer(function(request, response) { response.writeHead(200, {"Content-Type": "text/plain"}); var path = url1.parse(request.url).pathname; if(path == "/addition") { console.log("Request for add recieved\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); } else { response.write("Invalid Request\n"); } response.end(); }).listen(8889); console.log("Server started.");
当我跑步时,我在控制台中收到“服务器启动”消息。但是当我请求网址时
`http://localhost:8889/addition?var=1&var2=20`
我收到以下错误:
http.js:593 抛出新的TypeError('第一个参数必须是字符串或缓冲区');
当我注释掉显示变量'tot'的行时,代码正在运行,我得到的输出是我传递的2个get参数的连接值。在这种情况下,恰好是1 + 20 = 120。 我无法将数据转换为数字格式。
代码中的错误在哪里?错误信息基本上意味着什么?
非常感谢提前。
答案 0 :(得分:13)
你将数字传递给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);