【问题标题】:Node.js: fs.existsSync doesn't work on HerokuNode.js:fs.existsSync 在 Heroku 上不起作用
【发布时间】:2021-05-29 22:13:34
【问题描述】:

我有一个使用 Node.js 和 Express 的 Heroku 应用程序,我想确定某个文件是否存在。但是,似乎从未找到该文件。我有以下路径:

app.get('/sims/:sim_name', (req, res) => {
    var simName = req.params.sim_name; // get the name of the requested sim from the URL
    // if it exists, render it
    if (fs.existsSync(`pages/sims/${simName}.ejs`)) 
        res.render(`pages/sims/${simName}`);
    // otherwise, show an error message
    else
        res.send("Sorry, the page you requested does not exist.");
});

我的项目的目录结构是这样的:

.
├── Procfile
├── README.md
├── app.json
├── index.js
├── node_modules
│   ├── so many node_modues...
├── package-lock.json
├── package.json
├── public
│   ├── images
│   │   └── ...
│   ├── lang-logo.png
│   ├── node.svg
│   ├── scripts
│   │   └── ...
│   ├── stylesheets
│   │   ├── ...
│   └── test.html
├── test.js
└── views
    ├── pages
    │   ├── index.ejs
    │   ├── sims
    │   │   └── EField.ejs
    └── partials
        ├── header.ejs
        └── nav.ejs

我在这里做错了什么?还是这是 Heroku 的问题?

【问题讨论】:

  • Heroku 并没有真正做“持久文件”,更糟糕的是:如果这是一个爱好测功机,当测功机进入睡眠状态时,您的内容会重置。它只是重新启动原始 slug。所以:如果您需要持久存储,请不要使用文件。添加一个免费的数据库或文件存储,然后使用它。话虽如此:记录你在做什么。记录您尝试访问的文件,然后在 herokuapp.com 上转到您的测功机,右上角,“更多...”启动控制台,看看您的文件发生了什么。
  • @Mike'Pomax'Kamermans 我要查找的文件实际上是网站的永久页面,而不是由网站本身创建的页面(如果您知道我的意思),所以我真的不知道'不明白为什么它不应该是持久的。
  • @Mike'Pomax'Kamermans 我刚刚尝试使用控制台查找我正在寻找的页面并运行cd views/pages/sims && ls 显示 EField.ejs,我要渲染的文件。所以,它似乎是我认为的位置,但我仍然无法访问它。但是,我尝试了fs.existsSync('pages/sims/${simName}.ejs') 的一些变体,但仍然一无所获。
  • 记得将路径设为完全限定路径。 pages/sims/...相对于什么?所以你肯定想要一个const filePath = path.join(__dirname, ....),然后记录它以确保它真的是正确的路径。

标签: javascript node.js heroku fs


【解决方案1】:

你不守纪律的编码方式就像自找麻烦!在需要的地方开始使用大括号!

这是更正后的脚本...

if (fs.existsSync(`pages/sims/${simName}.ejs`)) 

   { res.render(`pages/sims/${simName}`);}

else
   { res.send("Sorry, the page you requested does not exist.");}

【讨论】:

    【解决方案2】:

    好的,我需要将pages/sims/${simName}.ejs 更改为views/pages/sims/${simName}.ejs

    我之前尝试过/views/pages/sims/${simName}.ejs,但由于文件路径在 Heroku 中的工作方式,它不起作用。

    根据@UserToday 的建议,我还添加了大括号(尽管这不是必需的)。

    【讨论】:

      猜你喜欢
      • 2013-11-23
      • 2014-12-08
      • 1970-01-01
      • 2014-12-12
      • 2016-06-21
      • 2021-11-28
      • 2016-08-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多