11

我正在尝试在 node.js 中实现一个基本的加法程序,它通过 URL(GET 请求)接受 2 个数字,将它们加在一起,并给出结果。

    var http = 要求(“http”);
    var url1 = 需要("url");

    http.createServer(函数(请求,响应){
      response.writeHead(200, {"Content-Type": "text/plain"});
      var path = url1.parse(request.url).pathname;

      如果(路径==“/添加”)
      {
        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");              
      }
      response.end();

    }).听(8889);

      console.log("服务器已启动。");

当我运行时,我在控制台中收到“服务器已启动”消息。但是当我请求网址时

`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 + '');

变量 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);
于 2012-05-06T11:55:30.487 回答