我无法使用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程序
答案 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
答案 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]
中的以下命令在您的系统中安装expressnpm install express
答案 7 :(得分:0)
我遇到了同样的问题,这对我有用。 希望它能工作。
function(req,res){};
答案 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');
})