在ExpressJS中渲染html页面

时间:2014-12-02 12:01:46

标签: node.js express

尝试使用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'

有谁知道这个问题是什么?

1 个答案:

答案 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'));
});