2012-05-06 44 views
10

我想在node.js中实现一个基本的附加程序,它通过URL(GET请求)接受2个数字并将它们加在一起,并给出结果。node.js错误 - 抛出新的TypeError('第一个参数必须是字符串或缓冲区');

 

    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

请注意,错误消息还应包含文本(假定代码保存为server.js):在服务器上。 (server.js:21:18)它告诉问题在第21行。这有助于快速找到问题。 – jjrv

回答

11

你将数字传递给response.write,当他们应该是字符串。就像这样:

response.write(total + ''); 

的总变量包含因为你通过parseInt函数()总结之前通过查询参数的数量21。如果通过response.write发送,它将导致错误,除非先将其转换为字符串,方法是将空字符串附加到该字符串中。 number1 + number2是可以的,因为它们是字符串,但它们的“总和”是“120”。

我建议也看看node.js包“表达”。它处理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); 
+0

工作!并且从来不知道“快递”。谢谢! :) – Krish

相关问题