11

URL(GETリクエスト)を介して2つの数字を受け入れる基本的な追加プログラムをnode.jsに実装しようとしています。これらは一緒に追加され、結果が得られます。

    var http = require("http");
    var url1 = require("url");

    http.createServer(関数(リクエスト、レスポンス) {
      response.writeHead(200, {"Content-Type": "text/plain"});
      var path = url1.parse(request.url).pathname;

      if(パス == "/追加")
      {
        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");              
      }
      応答.終了();

    }).リッスン(8889);

      console.log("サーバーが起動しました。");

実行すると、コンソールに「サーバーが開始されました」というメッセージが表示されます。しかし、私がURLをリクエストすると

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

次のエラーが表示されます。

http.js:593 throw new TypeError('最初の引数は文字列またはバッファでなければなりません');

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

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

よろしくお願いします。

4

1 に答える 1

14

数字が文字列でなければならないときに、response.write に数字を渡しています。このような:

response.write(total + '');

合計する前に parseInt() を介してクエリ パラメータを渡したので、変数 total には数値 21 が含まれます。最初に空の文字列を追加して文字列に変換しない限り、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);
于 2012-05-06T11:55:30.487 に答える