错误:ENOENT:没有这样的文件或目录,错误时统计“/public/main.html”(本机)

Posted

技术标签:

【中文标题】错误:ENOENT:没有这样的文件或目录,错误时统计“/public/main.html”(本机)【英文标题】:Error: ENOENT: no such file or directory, stat '/public/main.html' at Error (native) 【发布时间】:2016-07-20 08:10:18 【问题描述】:

这是我的server.js 文件:

var express = require('express'),
    app = express();  
app 
    .use(express.static('./public'))
    .get('*',function (req,res) 
        res.sendfile('/public/main.html');
        )
 .listen(3000);

这是我的main.html

<!DOCTYPE html>
<html>
    <head>
        <titel>Contacts</titel>
    <base href'/'> 
    </head>
    <body>
        <div class="container">
         <div class="page-header">
             <h1>Contatcs</h1>
         </div>
        </div> 
    </body>
</html>

以及文件夹结构:

【问题讨论】:

“'/public/main.html'”的路径好像不对。 【参考方案1】:

由于服务器和索引文件都在“公共”目录内,您可以简单地使用:

res.sendfile('./main.html');

回答 cmets 中的问题:在 Express 4.x 中,sendfile 方法被 sendFile 方法(全部小写 -> camelCase)取代。可能只是早期版本中的一个疏忽,在后者中得到了修复。

【讨论】:

这对我不起作用,res.sendFile() 和 res.sendfile() 方法有什么区别? @teranteshara 感谢您指出这一点,改进了我的答案。【参考方案2】:

对我来说使用“。”在路径中不起作用,相反,我将其调整为:

res.sendFile(__dirname + '/public/main.html');

【讨论】:

“__dirname”代表什么值?【参考方案3】:

当我提到 dist 文件夹时,我遇到了类似的问题。 index.html 的相对路径是:

app.get('*', (req, res) => 
  res.sendFile(path.join(__dirname, 'dist/project-name/index.html'));
);

【讨论】:

【参考方案4】:

您错过了。请记住相对目录是

res.sendfile('./public/main.html');

【讨论】:

【参考方案5】:

这个解决方案对我有用:

res.sendfile('./main.html');

【讨论】:

【参考方案6】:
res.sendfile('/public/main.html');

应该改为

res.sendfile('./public/main.html');

【讨论】:

【参考方案7】:

__dirname 已被弃用,建议的解决方案目前可能不起作用(2021 年 8 月)。在 Express 4.x 中,这已被简化,您不需要使用“路径”模块,您只需指定一个根选项,如下所示:

app.get('*', (req, res) => 
  res.sendFile('main.html', root: 'public');
);

【讨论】:

【参考方案8】:

只需使用这个:res.sendFile(__dirname + '/main.html'); 它肯定会奏效。 :)

【讨论】:

【参考方案9】:
server.js


const express = require('express');
const app = express();

app.use(express.static(__dirname + '/dist/projectName'));

app.post('/*', function(req, res)
    res.sendFile(__dirname +  '/dist/projectName/index.html');
);
app.listen(4200);

【讨论】:

【参考方案10】:

我遇到了同样的问题。看来我的客户端代码与我的服务器代码不“同步”(我不太熟悉节点/快递/角度的内部工作以及它们如何相互影响,所以“同步”是我能做到的最好的做)。我只重建了我的服务器代码(在添加了一个 nodejs 库并更新了另一个,以及其他服务器代码更改之后):

npm run build.server(对于我的项目,这仅构建服务器端。我有时在测试服务器更改时运行它,因为在没有手表的情况下也重新构建客户端代码可能需要很长时间)

一旦我重建了客户端代码,这个问题就解决了:

npm run build -- dev(对于我的项目,这会构建所有内容,服务器和客户端代码)

【讨论】:

【参考方案11】:

我遇到了同样的问题。给heroku发邮件后,我的问题是区分大小写的。我的一个文件全部大写,我不得不从那里进行调整。

【讨论】:

【参考方案12】:

虽然此错误的 OP 原因不同,但由于不同的原因,我得到了相同的错误,所以我将这个发布给其他来到这里的人。

我有一个正在更改当前目录的服务器端 shell 脚本。由于我们在 sendfile 中使用相对路径,因此在此脚本运行后我开始看到此错误。这个 shell 脚本正在由 Node 运行。

【讨论】:

【参考方案13】:

我的 server.js

const express = require('express');
const app = express();

app.use(express.static(__dirname + '/dist/projectName'));

app.get('/*', function(req, res)
    res.sendFile(__dirname +  '/dist/projectName/index.html');
);
app.listen(4200);

【讨论】:

以上是关于错误:ENOENT:没有这样的文件或目录,错误时统计“/public/main.html”(本机)的主要内容,如果未能解决你的问题,请参考以下文章

纱线安装错误“ENOENT:没有这样的文件或目录

proxyquire 错误:ENOENT:没有这样的文件或目录,scandir

错误:ENOENT:没有这样的文件或目录,在进行 Yarn 安装时使用 lstat

Heroku CLI 登录失败并出现错误“错误:ENOENT:没有这样的文件或目录,打开 'H:/_netrc'”

反应本机调试器:“错误:ENOENT:没有这样的文件或目录”

错误:ENOENT:没有这样的文件或目录,stat ... .steampath