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

8
jLynx 10 dic. 2015 a las 08:20

7 respuestas

La mejor respuesta

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);
11
Toanalien 10 dic. 2015 a las 05:28

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.

24
lift-it-luke 25 abr. 2017 a las 22:27

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.

5
ugo 12 feb. 2017 a las 03:37

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"                                                                                 
  }                                                                                                    
}
2
prayagupd 17 oct. 2016 a las 13:30

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);
});
0
Alexander Mills 14 ene. 2018 a las 00:16

Instale express en su sistema usando el siguiente en su terminal [ubuntu]

npm install express
0
Manna 5 may. 2018 a las 11:44

Tuve el mismo problema, esto funcionó para mí. Espero que funcione.

 function(req,res){};
  • El primer argumento debe ser "req" *
1
Serge 12 oct. 2018 a las 14:53
34194245