2012-05-06 8 views
10

Estoy tratando de implementar un programa de adición básico en node.js que acepta 2 números a través de la URL (Solicitud GET) los agrega juntos, y da el resultado.node.js Error - lanzar nuevo TypeError ('primer argumento debe ser una cadena o Buffer');

 

    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."); 

Cuando corro, aparece el mensaje "Iniciado por el servidor" en la consola. Pero cuando solicito la url

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

Estoy recibiendo el siguiente error:

http.js: 593 tiro nueva TypeError ('primer argumento debe ser una cadena o búfer');

Cuando comento la línea que muestra la variable 'tot', el código se está ejecutando, y la salida que obtengo es el valor concatenado de los 2 parámetros de obtención que paso. En este caso, pasa a ser 1 + 20 = 120. No puedo convertir los datos en formato numérico.

¿Dónde está el error en el código? ¿Y qué significa básicamente el mensaje de error?

Muchas gracias de antemano.

+0

Tenga en cuenta que el mensaje de error también debería haber incluido el texto (suponiendo que el código se guarda como server.js): en el servidor. (server.js: 21: 18) que indica que el problema está en la línea 21. Eso ayuda a encontrar el problema rápidamente. – jjrv

Respuesta

11

Está pasando números a response.write, cuando deberían ser cadenas. De esta manera:

response.write(total + ''); 

El total variable contiene el número 21, ya que ha pasado a través de los parámetros de consulta parseInt() antes de sumar. Causará un error cuando se envíe a través de response.write a menos que primero se convierta a una cadena, al agregarle la cadena vacía. number1 + number2 está bien porque son cadenas, pero su "suma" es "120".

Sugiero que también busque en el paquete node.js "express". Se maneja una gran cantidad de los elementos básicos para un servidor HTTP para que pueda escribir como:

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); 
+0

¡Funcionó! y nunca supo sobre 'express'. ¡Gracias! :) – Krish

Cuestiones relacionadas