![](/img/trans.png)
[英]webpack + express + angular 4 error "Error: ENOENT: no such file or directory, stat 'C:\public\index.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.