簡體   English   中英

錯誤:ENOENT:沒有這樣的文件或目錄,錯誤時統計“/public/main.html”(本機)

[英]Error: ENOENT: no such file or directory, stat '/public/main.html' at Error (native)

這是我的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>

和文件夾結構:

由於服務器和索引文件都在“公共”目錄內,您可以簡單地使用:

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

回答評論中的問題:在 Express 4.x 中, sendfile方法被sendFile方法替換(全部小寫 -> 駝峰式)。 可能只是早期版本的疏忽,在后者中得到了修復。

對我來說使用“。” 在路徑中不起作用,相反,我將其調整為:

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

當我提到dist文件夾時,我遇到了類似的問題。 index.html 的相對路徑是:

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

你錯過了 請記住相對目錄是

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

應該改為

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

這個解決方案對我有用:

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

只需使用這個: res.sendFile(__dirname + '/main.html'); 它肯定會起作用。 :)

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);

我有同樣的問題。 看來我的客戶端代碼在某種程度上與我的服務器代碼“不同步”(我不太熟悉 node/express/angular 的內部工作原理以及它們如何相互影響,所以“同步”是我能做到的最好的做)。 我只重建了我的服務器代碼(在添加了一個 nodejs 庫並更新了另一個,以及其他服務器代碼更改之后):

npm run build.server (對於我的項目,這只構建服務器端。我有時在測試服務器更改時運行它,因為重建客戶端代碼,沒有監視,可能需要很長時間)

一旦我重建了客戶端代碼,這個問題就解決了:

npm run build -- dev (對於我的項目,這會構建所有內容,服務器和客戶端代碼)

__dirname 已被棄用,建議的解決方案目前可能不起作用(2021 年 8 月)。 在 Express 4.x 中,這已經被簡化,你不需要使用 'path' 模塊,你只需要指定一個像這樣的 root 選項:

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

我有同樣的問題。 在給 heroku 發電子郵件后,我的是一個區分大小寫的問題。 我的一個文件全部大寫,我不得不從那里進行調整。

盡管 OP 的原因因此錯誤而異,但由於不同的原因,我遇到了相同的錯誤,因此我將其發布給其他來這里的人。

我有一個正在更改當前目錄的服務器端 shell 腳本。 由於我們在sendfile使用相對路徑,因此在此腳本運行后我開始看到此錯誤。 這個 shell 腳本是由 Node.js 運行的。

對於我的情況,我使用了帶有 ServeStaticModule 的nestjs ,它有助於添加 serveRoot 選項

ServeStaticModule.forRoot({
    // play with options below
    rootPath: path.resolve(`./src/assets`), // I prefer to use resolve in your case it can be better to use path.join
    serveRoot: '/assets',
})

然后我在以下位置找到了文件:http://localhost:3000/assets/1.png

其他選項: ServeStaticModuleOptions

我的 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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM