Tengo un código expreso simple que agrega dos números:
const express = require('express') const bodyParser = require('body-parser') const app = express() const port = 3000 app.use(bodyParser.urlencoded({ extended: true })) app.get('/', (req, res) => { res.sendFile(__dirname + "/index.html") }) app.post("/", (req, res) => { let n1 = req.body.num1 //these n1 and n2 are coming from inex.html let n2 = req.body.num2 let result = Number(n1) + Number(n2) res.send("" + result) }) app.listen(port, () => { console.log("Server is running at port 3000") }) En res.send , si eliminé la cadena vacía y escribo solo res.send(result) , el código devuelve un error:
RangeError [ERR_HTTP_INVALID_STATUS_CODE]: Invalid status code: 5 at new NodeError (node:internal/errors:372:5) at ServerResponse.writeHead (node:_http_server:275:11) at ServerResponse._implicitHeader (node:_http_server:266:8) at ServerResponse.end (node:_http_outgoing:871:10) at ServerResponse.send (C:\Users\Vandana Singh Bondil\OneDrive\Desktop\Lokesh\calculator\node_modules\express\lib\response.js:232:10) at C:\Users\Vandana Singh Bondil\OneDrive\Desktop\Lokesh\calculator\calculator.js:17:9 at Layer.handle [as handle_request] (C:\Users\Vandana Singh Bondil\OneDrive\Desktop\Lokesh\calculator\node_modules\express\lib\router\layer.js:95:5) at next (C:\Users\Vandana Singh Bondil\OneDrive\Desktop\Lokesh\calculator\node_modules\express\lib\router\route.js:144:13) at Route.dispatch (C:\Users\Vandana Singh Bondil\OneDrive\Desktop\Lokesh\calculator\node_modules\express\lib\router\route.js:114:3) at Layer.handle [as handle_request] (C:\Users\Vandana Singh Bondil\OneDrive\Desktop\Lokesh\calculator\node_modules\express\lib\router\layer.js:95:5)¿Alguien puede decirme por qué funciona el código?
Porque send requiere que body sea...
...un objeto
Buffer, unString, un objeto,Booleano unArray.
Los números no están en esa lista, pero las cadenas sí. Aunque no está documentado en v4 (en adelante), en v3 podría pasar un código de estado de respuesta (como 200 o 404) como primer argumento, y aparentemente todavía admite hacerlo (a pesar de no estar documentado) en la versión que está usando, probablemente para apoyar proyectos heredados. 5 no es un código de estado de respuesta válido, por lo que obtiene el error. Tienes que convertir tu número a cadena. "" + result es una forma de hacerlo. Otros son String(result) o result.toString() .