2015-12-10 3 views
3

Я не могу отправить HTML-файл с помощью Node.jsres.sendFile не функция Node.js

Так первая от это ошибка я получаю

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) 

и мое приложение .js код

var http = require('http'); 

http.createServer(function (req, res) { 
    res.sendFile('test.html', { root: __dirname }); 
}).listen(process.env.PORT); 

Если я пропускаю что-то простое, я извиняюсь, как это первая node.js программа, которую я сделал

+2

Я думаю, что 'sendFile' является метод отклика [ExpressJS] (http://expressjs.com/). Вам нужно будет установить и использовать Express, чтобы использовать его. – Andy

ответ

10

сена dFile только в модуле Express.

Попробуйте этот код

var express = require('express'); 
var app = express(); 
app.get('/', function(req, res) { 
    res.sendFile('path-to-file'); 
}); 
app.listen(PORT); 
+2

Обратите внимание, что это не сработает _until_ вы установили Express. – Andy

+0

ahhh, мой ответ должен был просто быть вашим комментарием. Хорошая работа, сэр или мадам. –

+0

Проблема в том, что Express, похоже, не установлен, хотя я думал, что сделал это – jLynx

3

Спекуляция на (правильный) ответ Toanalien, вы могли бы сделать то же самое по:

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 

См http.ServerResponse и fs.createReadStream.

1

Ответ выше правильный, я просто добавляю рабочий пример без express.js, но routedispatcher.

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

вызывающая конечная точка /test вернет views/test.html.

package.json есть

{                                             
    "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"                     
    }                          
} 
12

Этот конкретный вопрос уже был дан ответ, но стоит отметить, что если вы используете «Экспресс» версия 3.x, исправление может быть легко как переключение res.sendFile('path-to-file'); до res.sendfile('path-to-file');

Это была проблема в моем случае. Таким образом, вы можете либо обновить экспресс-версию (или) изменить имя метода в нижнем регистре, чтобы исправить эту проблему.

+0

это спасет мою жизнь: D – nuttynibbles

+0

еще одна жизнь спасена! –

0

Попробуйте корешей

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); 
}); 
Смежные вопросы