尝试使用NodeJS和Express 4.10.4渲染简单的html页面时遇到错误,代码如下:
var path = require('path');
var express = require('express');
var logger = require('morgan');
var app = express();
app.set('port', process.env.PORT || 8080);
app.use(express.static(path.join(__dirname, '/client')));
app.set('view engine', 'html');
app.use(logger('dev'));
app.get('*', function (req, res) {
res.sendFile('/index.html');
});
app.use(function (err, req, res, next) {
console.log(err.stack);
res.status(500).send({message: err.message});
});
console.log('Server has started on port: '+ app.get('port'));
我的index.html页面位于客户端文件夹中,它在我的浏览器中呈现,但是我收到以下错误:
Error: ENOENT, stat 'c:\index.html'
有谁知道这个问题是什么?
答案 0 :(得分:2)
错误代码'ENOENT'是指示缺少文件的unix错误代码。
点击此处:http://www-numi.fnal.gov/offline_software/srt_public_context/WebDocs/Errors/unix_system_errors.html
我建议您使用快速响应的sendFile方法,其中包含API中所述的选项和回调:http://expressjs.com/api.html#res.sendFile。使用options object literal指示html文件的位置。见下面的示例。在第一次请求时没有错误。在后续请求中,回调将收到响应状态代码304的错误 - 阅读这意味着什么。
请参阅下面的代码修改,看看它是否对您有所帮助。
var path = require('path');
var express = require('express');
var logger = require('morgan');
var app = express();
app.set('port', process.env.PORT || 9090);
app.use(express.static(path.join(__dirname, '/client')));
app.set('view engine', 'html');
app.use(logger('dev'));
app.get('*', function (req, res) {
var options = {
root: __dirname + '/client/'
};
res.sendFile('/index.html', options, function (err) {
if (err) {
console.log('Error in res : %s, status code: %s', err, res.statusCode);
res.status(err.status).end();
}
else {
console.log('Sent: ', 'index.html');
}
});
});
app.use(function (err, req, res, next) {
console.log('error stack is here : ' + err.stack);
res.status(500).send({message: err.message});
});
app.listen(app.get('port'), function() {
console.log('Server has started on port: '+ app.get('port'));
});