node.js - 在 ExpressJS 中渲染 html 页面

标签 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'

有人知道问题出在哪里吗?

最佳答案

错误代码“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/

相关文章:

node.js - 使用 Nock 响应 API 测试失败, "Error : Nock : No match for request"

node.js - 如何使用 MongoDB/mongoose 有效地获取帖子的评论?

javascript - Express 应用程序未定义错误对象

javascript - 等效于 NodeJS 中的 window.location 和 window.pathname

node.js - 我可以在同一条路线上使用 2 个不同的功能吗? Node.js

javascript - 附加带有固定行名称的文件 javascript

node.js - 使用 Passport 进行 Facebook 身份验证的 Node+React 应用程序中的 CORS 错误

javascript - 如何训练 LSTM 在 tensorflow.js 中对垃圾邮件进行分类?

javascript - 如何检查 Node JS 中的错误类型?

node.js - TypeError : Object {. ..} 没有方法 'find' - 当将 mongoose 与express一起使用时