res.sendFile不是Node.js函数

时间:2015-12-10 05:20:49

标签: javascript node.js iis

我无法使用node.js

发送HTML文件

首先,这是我得到的错误

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)

我的app.js代码是

var http = require('http');

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

如果我遗漏了一些简单的东西,我很抱歉,因为这是我制作的第一个node.js程序

9 个答案:

答案 0 :(得分:18)

这个具体问题已经得到解答,但值得一提的是,如果您使用的是“快速”版本3.x,那么修复就像将res.sendFile('path-to-file');切换为res.sendfile('path-to-file');一样简单

这是我的问题。因此,您可以升级快速版本(或)使用小写更改方法名称以解决此问题。

答案 1 :(得分:11)

仅在Express模块​​中发送sendFile。

试试此代码

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

答案 2 :(得分:4)

在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  

请参阅ratio_coveredhttp.ServerResponse

答案 3 :(得分:2)

上面的答案是正确的,我只是添加了一个没有express.js但只有route dispatcher的工作示例。

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

答案 4 :(得分:1)

app.get("/", function(req,res){
    res.sendFile(__dirname + "/html filename with .html extension");
});

请检查函数中的第一个参数必须是req,然后是res,请确保您已执行相同的操作,因为有时由于一些小错误而导致错误。

这是我的亲身经历,我尝试了所有解决方案,但是当我检查代码时,发现我已将res作为第一个参数编写,将req作为第二个参数编写。

答案 5 :(得分: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);
});

答案 6 :(得分:0)

使用终端[ubuntu]

中的以下命令在您的系统中安装express
npm install express

答案 7 :(得分:0)

我遇到了同样的问题,这对我有用。  希望它能工作。

 function(req,res){};
  • 第一个参数应为“ req” *

答案 8 :(得分:0)

在我的情况下,发生这种情况是因为该函数需要两个参数,但我却这样分配了3个:

app.use(function notFoundHandler(err, req, res) {
    res.sendFile('404.html');
})

然后我删除了'err'参数,它运行良好。像这样:

app.use(function notFoundHandler(req, res) {
    res.sendFile('404.html');
})