Ошибка: ENOENT: нет такого файла или каталога, stat '/public/main.html' в 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>

И структура папки:

Ответ 1

Поскольку и сервер, и индексный файл находятся ВНУТРИ публичного каталога, вы можете просто использовать:

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

Чтобы ответить на вопрос в комментариях: В Express 4.x метод sendfile был заменен методом sendFile (все строчные буквы → camelCase). Вероятно, просто упущение в ранних версиях, которое было исправлено в последних.

Ответ 2

Вы пропустили точку. Имейте в виду относительный каталог

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

Ответ 3

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

следует изменить на

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

Ответ 4

Это решение работает для меня:

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

Ответ 5

У меня была похожая проблема, когда я ссылался на папку dist. относительный путь к index.html был:

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

Ответ 6

У меня была та же проблема. После отправки по электронной почте герою моя проблема была чувствительной к регистру. Один из моих файлов был во всех кепках, и я должен был внести коррективы оттуда.

Ответ 7

Для меня использование "." на пути не работает, вместо этого я изменил его как:

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

Ответ 8

мой сервер .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);

Ответ 9

Хотя причина OP отличается от этой ошибки, я получил ту же ошибку из-за другой причины, поэтому я отправляю ее для других, которые приходят сюда.

У меня была серверная оболочка script, которая меняла текущий каталог. Поскольку мы используем относительные пути в sendfile, я начал видеть эту ошибку после этого script. Эта оболочка script выполнялась Node.