node.js错误 - 抛出新的TypeError('第一个参数必须是字符串或缓冲区');

Kri*_*ish 11 node.js

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


    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.我无法将数据转换为数字格式.

代码中的错误在哪里?错误信息基本上是什么意思?

提前谢谢了.

jjr*_*jrv 13

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

response.write(total + '');
Run Code Online (Sandbox Code Playgroud)

变量total包含数字21,因为您在求和之前通过parseInt()传递了查询参数.它通过response.write发送时会导致错误,除非您首先通过将空字符串附加到字符串来转换为字符串.number1 + number2是好的,因为它们是字符串,但它们的"sum"是"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);
Run Code Online (Sandbox Code Playgroud)