Обслуживание изображений через http createServer

Я пытаюсь создать базовый веб-сервер с Node.JS, но столкнулся с проблемой правильной обработки изображений.

var server = http.createServer(function (request, response){
    if(request.url === '/') {
        fs.readFile('public/index.html', 'utf8', function(errors, contents){
            response.write(contents); 
            response.end();
        });
    } else {
        fs.readFile("public" + request.url, 'utf8', function(errors, contents){
            if (!errors) {
                response.end(contents);
            } else {
                console.log('Failed to read file: /public' + request.url);
                response.writeHead(404);
                response.end();
            }
        });
    }
});

Все работает отлично, кроме того, если вы идете посмотреть изображение, которое оно пытается загрузить (которое, я считаю, повреждено, не могу открыть его), чего я не хочу, я хочу, чтобы изображения были правильно загружены в браузере ( не через тег)

Бонусные баллы: мне нужно иметь возможность правильно указывать соответствующие заголовки (нужно ли мне только оператор switch и устанавливать их через это?), Поскольку хром выдает предупреждения

Resource interpreted as Stylesheet but transferred with MIME type text/plain: "http://localhost/css.css".

javascript,node.js,

0

Ответов: 1


2 принят

Вы можете использовать expressjs: http://expressjs.com/

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

app.get('/', (req, res) => res.sendFile('public/index.html'))
app.use(express.static('public'))

app.listen(8080, () => console.log('Example app listening on port 8080!'))

Примечание:

Ваш код небезопасен: "public" + request.url. Ваши пользователи могут получить все файлы вашего сервера:fs.readFileSync("public/../../../README.txt");

Вы получите ошибку в родительской папке.

Ошибка: ENOENT: нет такого файла или каталога, откройте «C: README.txt».

JavaScript, Node.js,
Похожие вопросы
Яндекс.Метрика