我尝试使用 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'
有人知道问题出在哪里吗?
最佳答案
错误代码“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 。使用选项对象文字来指示 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'));
});
关于node.js - 在 ExpressJS 中渲染 html 页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27248964/