Вопрос по node.js – Ошибка node.js - генерировать новый TypeError («первый аргумент должен быть строкой или буфером»);

10

Я пытаюсь реализовать базовую программу сложения в node.js, которая принимает 2 числа через URL (запрос 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.");

Когда я бегу, я получаю "Сервер запущен" сообщение в консоли. Но когда я запрашиваю URL

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

Я получаю следующую ошибку:

http.js:593 throw new TypeError('first argument must be a string or Buffer');

Когда я закомментирую строку, которая отображает переменную "tot", код выполняется, и вывод, который я получаю, является объединенным значением двух параметров get, которые я передаю. В этом случае это будет 1 + 20 = 120. Я не могу преобразовать данные в числовой формат.

Где ошибка в коде? А что в основном означает сообщение об ошибке?

Спасибо заранее.

Обратите внимание, что сообщение об ошибке также должно содержать текст (при условии, что код сохранен как server.js): на сервере. & Lt; anonymous & gt; (server.js: 21: 18), который говорит, что проблема в строке 21. Это помогает быстро найти проблему. jjrv

Ваш Ответ

1   ответ
12

когда они должны быть строками. Как это:

response.write(total + '');

Переменная total содержит число 21, потому что вы передали параметры запроса через parseInt () перед суммированием. Это вызовет ошибку при отправке через response.write, если вы сначала не преобразуете строку, добавляя к ней пустую строку. число 1 + число 2 нормально, потому что они являются строками, но их "сумма" равно "120".

Я предлагаю также изучить пакет "express.quot" для 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);
Работал! и никогда не знал о «экспрессе». Спасибо! :) Krish

Похожие вопросы