ENOENT:没有这样的文件或目录Heroku

时间:2013-07-28 14:59:36

标签: node.js heroku github

我正在尝试使用readFileSync()将html文件的内容显示到节点js文件中。但是我得到了这个错误:

Error: ENOENT, no such file or directory 'index.html'
    at Object.fs.openSync (fs.js:427:18)
    at Object.fs.readFileSync (fs.js:284:15)
    at port (/app/web.js:6:22)
    at callbacks (/app/node_modules/express/lib/router/index.js:161:37)
    at param (/app/node_modules/express/lib/router/index.js:135:11)
    at pass (/app/node_modules/express/lib/router/index.js:142:5)
    at Router._dispatch (/app/node_modules/express/lib/router/index.js:170:5)
    at Object.router (/app/node_modules/express/lib/router/index.js:33:10)
    at next (/app/node_modules/express/node_modules/connect/lib/proto.js:190:15)
    at Object.expressInit [as handle] (/app/node_modules/express/lib/middleware.js:30:5)

这是我的web.js文件:

var express = require('express');
var app = express.createServer(express.logger());
var fs=require('fs');
app.get('/', function(request, response) {
//  response.send('Hello World2 !');
response.send(fs.readFileSync('index.html').toString());
});

var port = process.env.PORT || 5000;
app.listen(port, function() {
 console.log("Listening on " + port);
});

“web.js”文件和“index.html”位于我的github存储库中,位于以下地址:

https://github.com/myUsername/bitstarter/blob/master/node-js-sample/web.js 
https://github.com/myUsername/bitstarter/blob/master/node-js-sample/index.html

我尝试了不同的路径来解决“index.html”无效问题,例如

 /bitstarter/blob/master/node-js-sample/index.html
/node-js-sample/index.html
/bitstarter/node-js-sample/index.html
./index.html

! 我正在使用AWS EC2 ubuntun 12-4。 几个小时我一直在争论这个错误!任何帮助都非常感谢。

3 个答案:

答案 0 :(得分:2)

表示app.get('/', ...的行表示“当客户端要求'/'时......”即:它将“网络空间”(URL路径)映射到操作中。在您的情况下 - 阅读并返回index.html

的内容

因此,您案件中的正确请求只是www.mydomain.com/

如果您希望能够提供静态文件,请阅读express.static()

答案 1 :(得分:1)

正如Nitzan所提到的,从长远来看,您将需要学习如何在构建节点应用程序时使用express.static()来提供html文件和模板。但是,在回答您目前的问题时,我建议如下:

  1. index.html文件保存到您EC2实例中的web.js文件所在的目录中(即不要尝试在github页面上远程访问它)。

  2. 使用以下代码:

  3.   

    var content = fs.readFileSync('index.html','utf-8');
      response.send(内容);

    这会将index.html文件的内容读入名为content的变量,同时指定正确的编码。然后它将指示节点将内容发送到浏览器。

答案 2 :(得分:0)

问题似乎是你没有在git中添加“index.html”。你需要将它添加到git然后推送到heroku。这将解决您的问题。希望它有所帮助:)