Node.js Ошибка - throw new TypeError ('первый аргумент должен быть строкой или буфером');
Я пытаюсь реализовать базовую программу добавления в node.js, которая принимает 2 числа через URL (GET Request), добавляет их вместе и дает результат.
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" в консоли. Но когда я запрашиваю URL
`http://localhost:8889/addition?var=1&var2=20`
Я получаю следующую ошибку:
http.js: 593 throw new TypeError ( "первый аргумент должен быть строкой или буфером" );
Когда я прокомментирую строку, которая отображает переменную 'tot', код запускается, и вывод, который я получаю, представляет собой конкатенированное значение параметров get get 2. В этом случае это 1 + 20 = 120.
Я не могу преобразовать данные в числовой формат.
Где ошибка в коде? И что в основном означает сообщение об ошибке?
Большое спасибо заранее.
Ответы
Ответ 1
Вы передаете числа response.write, когда они должны быть строками. Вот так:
response.write(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);