2012-05-06 43 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

相關問題