Я пытаюсь изучить все узлы узла. Я знаю, что вы можете служить файлу с фреймворком, но я пытаюсь сделать это вручную. У меня есть файл jpeg в './public/logo.jpg'. Когда я отправляю запрос через localhost: 8080, я не получаю изображение, просто пустой экран с образцом общего изображения. Что я делаю не так? Благодаря!Подавать файл jpeg в узле без рамки
var http=require('http');
var url=require('url');
var fs=require('fs');
// creates a new httpServer instance
http.createServer(function (req, res) {
// this is the callback, or request handler for the httpServer
log('in server callback')
res.ins=res.write;
var parse=url.parse(req.url,true);
var path0=parse.pathname;
console.log(path0)
// respond to the browser, write some headers so the
// browser knows what type of content we are sending
var serveFile=function(){
var path='./public'+path0
fs.exists(path,function(e){
if(e){
log('serving file')
log(path)
fs.readFile(path,'binary',function(err,data){
if(data){
res.writeHead(200, {'Content-Type': 'image/jpeg'});
res.ins(data)
res.end()
}
})
}
else{
log('no file to serve')
log(path)
servePage()
}
})
}
serveFile()
}).listen(8080); // the server will listen on port 8080
Возможный дубликат [Основной статический файловый сервер в NodeJS] (http://stackoverflow.com/questions/7268033/basic-static-file-server-in-nodejs) – moka
Пока Я меняю кодировку на «utf8» и изменяю mime, указанный выше код работает для файлов css и js-файлов, а не для файлов изображений. Ссылка, которую вы дали, использует «createFileStream» в отличие от «readFile». Есть ли что-то о изображениях, которые несовместимы с «readFile»? Спасибо – gloo
Когда вы используете readFile, он будет загружать весь файл в память перед отправкой по сети. Но если вы используете поток с каналом, он будет просто «транслировать» поток в сеть и напрямую выводить IO из файла в поток сокетов, что намного эффективнее, особенно для больших файлов. При высокой нагрузке и readFile ваш сервер не сможет обрабатывать слишком много файлов из-за пределов RAM. Хотя это не тот случай с потоками. – moka