2012-05-06 6 views
10

私はURLを介して2つの数字を受け入れるnode.jsに基本的な追加プログラム(GET Request)を実装しようとしています。それらを一緒に追加して結果を返します。node.js Error - 新しい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."); 

私が実行すると、コンソールに「Server started」というメッセージが表示されます。しかし、私は次のエラー取得しています

`http://localhost:8889/addition?var=1&var2=20`

URLを要求する場合:

http.js:593 スロー新しいTypeError例外( '最初の引数が文字列やバッファでなければなりませんが');

変数 'tot'が表示されている行をコメントアウトすると、コードが実行され、出力は2つの取得パラメータの連結値になります。この場合、1 + 20 = 120となります。 データを数値形式に変換できません。

コードの間違いはどこですか?そして、エラーメッセージは基本的にどういう意味ですか?

事前に感謝します。

+0

注:サーバーであなたのような書き込みをすることができますので、これは、HTTPサーバのための基礎の多くを処理します。 (server.js:21:18)は、問題が21行目にあることを示しています。問題をすばやく見つけるのに役立ちます。 – jjrv

答えて

11

文字列でなければならないときは、response.writeに数字を渡しています。

response.write(total + ''); 

変数totalには、合計する前にparseInt()を通じてクエリパラメータを渡したため、数値21が含まれています。最初に文字列に変換しない限り、空文字列を追加しない限り、response.writeを介して送信するとエラーが発生します。 number1 + number2は文字列なのでOKですが、 "sum"は "120"です。

node.jsパッケージの "express"も調べることをお勧めします。エラーメッセージも(コードがserver.jsとして保存されると仮定した場合)のテキストが含まれている必要があることを

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

Worked! 「明示」については決して知らなかった。ありがとう! :) – Krish