No puedo enviar un archivo HTML usando node.js
Primero, este es el error que obtengo
Application has thrown an uncaught exception and is terminated:
TypeError: res.sendFile is not a function
at Server.<anonymous> (C:\Program Files\iisnode\www\test\app.js:4:6)
at emitTwo (events.js:88:13)
at Server.emit (events.js:173:7)
at HTTPParser.parserOnIncoming [as onIncoming] (_http_server.js:529:12)
at HTTPParser.parserOnHeadersComplete (_http_common.js:89:23)
Y mi código app.js es
var http = require('http');
http.createServer(function (req, res) {
res.sendFile('test.html', { root: __dirname });
}).listen(process.env.PORT);
Si me falta algo simple, lo siento, ya que este es el primer programa node.js que hice
7 respuestas
SendFile solo en el módulo Express.
Prueba este código
var express = require('express');
var app = express();
app.get('/', function(req, res) {
res.sendFile('path-to-file');
});
app.listen(PORT);
Este problema específico ya ha sido respondido, pero vale la pena mencionar que si está utilizando la versión "express" 3.x, la solución podría ser tan fácil como cambiar res.sendFile('path-to-file');
a res.sendfile('path-to-file');
Este fue el problema en mi caso. Por lo tanto, puede actualizar la versión exprés (o) cambiar el nombre del método con minúsculas para solucionar este problema.
Piggybacking en la respuesta (correcta) de Toanalien, podría lograr lo mismo al:
var http = require('http');
var fs = require('fs');
var path = require('path');
http.createServer(function (req, res) {
// maybe test for existence here using fs.stat
res.writeHead(200, {"Content-Type": "text/html"});
fs.createReadStream(path.resolve(__dirname, 'test.html'))
.pipe(res);
}).listen(process.env.PORT || '3000'); // provide a default
Consulte http.ServerResponse y fs.createReadStream.
La respuesta anterior es correcta, solo estoy agregando un ejemplo de trabajo sin express.js
pero route
despachador.
var http = require('http');
var Router = require('routes');
var router = Router();
var fs = require('fs')
router.addRoute("GET /test", (req, res, params) => {
let file = __dirname + '/views/test.html'
res.writeHead(200, {"Content-Type": "text/html"});
fs.createReadStream(file).pipe(res);
});
var server = http.createServer((req, res) => {
var match = router.match(req.method + ' ' + req.url);
if (match) match.fn(req, res, match.params);
else {
res.statusCode = 404;
res.end('not found\n');
}
}).listen(process.env.PORT || 3000);
Llamar al punto final /test
devolverá el views/test.html
.
package.json es,
{
"name": "node-app",
"version": "1.0.0",
"description": "node api",
"main": "server.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "prayagupd",
"license": "ISC",
"dependencies": {
"request": "^2.75.0",
"request-promise": "^4.1.1",
"routes": "^2.1.0"
}
}
Prueba esto amigos
const index = path.resolve(root + '/index.html');
const http = require('http');
const server = http.createServer((req, res) => {
res.setHeader('Content-Type', 'text/html');
fs.createReadStream(index).pipe(res);
});
Instale express en su sistema usando el siguiente en su terminal [ubuntu]
npm install express
Tuve el mismo problema, esto funcionó para mí. Espero que funcione.
function(req,res){};
- El primer argumento debe ser "req" *
Preguntas relacionadas
Nuevas preguntas
javascript
Para preguntas sobre la programación en ECMAScript (JavaScript / JS) y sus diversos dialectos / implementaciones (excepto ActionScript). Incluya todas las etiquetas relevantes en su pregunta; por ejemplo, [node.js], [jquery], [json], etc.