2013-02-18 4 views
0

У меня есть изображение pic.jpeg, которое я должен отображать на браузере. Вот фрагмент кода, который я написал.показ изображения с помощью nodejs

var mimeTypes = { 
      '.js' : 'text/javascript', 
      '.css' : 'text/css', 
      '.gif' : 'image/gif', 
      '.jpeg': 'image/jpeg', 
      '.html': 'text/html' 
     }; 

    contenttype = mimeTypes[path.extname(req.url)];  
    pathname = "." + req.url; 

var stream = fs.createReadStream(pathname); 
     stream.on('error', function(error) { 
      res.writeHead(500); 
      res.end(); 
      return; 
     }); 
      res.setHeader('Content-Type', contenttype); 
      res.writeHead(200); 
      stream.on('open', function() { 
       // This just pipes the read stream to the response object (which goes to the client) 
       util.pump(stream, res, function(error) { 
       //Only called when the res is closed or an error occurs 
       console.log("Error:"); 
       res.end(); 
       return; 
       }); 
      }); 

Приведенный выше код работает большую часть времени, и изображения отображаются так, как должно, но порой изображение отсутствует.

ответ

2

Вы не должны обслуживать статические файлы через node.js. Вы должны использовать Nginx или аналогичный веб-сервер для этого.

В качестве альтернативы, вы можете использовать connect модуль для обслуживания статических файлов

var server = connect() 
    .use('/static', connect.static(__dirname + '/static')) 
    .use(router) 
    .listen(port); 

Создайте новый каталог с именем static и поместить все файлы в нем, так что вы сможете получить доступ к ним с помощью /static/images/testimage.jpg

+0

Мне любопытно узнать, почему вы говорите «в идеале», следует использовать nginx или подобное вместо узла для статических файлов. –

+0

Удалено, Просто люди не становятся слишком любопытными. :) –

0

Вместо того чтобы внедрять статический файл, обслуживающий себя, почему бы не использовать библиотеку, такую ​​как Express? Вы можете видеть, что здесь используется: Express Static nodejs или см. API здесь: http://expressjs.com/api.html (поиск по «статическому»). Это будет намного меньше кода и надежным.

+1

да может это сделать, но это только для образовательной цели. Я хочу знать, как все работает. –

Смежные вопросы