节点js显示来自服务器的图像

时间:2014-01-31 20:42:28

标签: javascript node.js

我正在尝试在端口5000的本地主机上的基本网页上显示图像 这是main.js

var http = require('http');

var domain = require('domain');

var root = require('./root');
var image = require('./image');



function replyError(res) {

  try {

    res.writeHead(500);

    res.end('Server error.');

  } catch (err) {

    console.error('Error sending response with code 500.');

  }

};



function replyNotFound(res) {

  res.writeHead(404);

  res.end('not found');

}



function handleRequest(req, res) {

  console.log('Handling request for ' + req.url);

  if (req.url === '/') {

    root.handle(req, res);

  } else if (req.url === '/image.png'){

    image.handle(req, res);

  } else {

    replyNotFound(res);

  }

}



var server = http.createServer();



server.on('request', function(req, res) {

  var d = domain.create();

  d.on('error', function(err) {

    console.error(req.url, err.message);

    replyError(res);

  });

  d.run(function() { handleRequest(req, res); });

});



function CallbackToInit(){

  server.listen(5000);
};
root.init(CallbackToInit);

使用回调我希望服务器只在以下代码的init函数运行后才开始监听(5000)

var http = require('http');

var body;

exports.handle = function(req, res) {
  res.writeHead(200, {
    'Content-Type': 'image/png'
  });
  res.end(body);
};

exports.init = function(cb) {
  require('fs').readFile('image.png', function(err, data) {
    if (err) throw err;
    body = data;
    cb();
  });
}

这是我不能使用快递的作业

我正在尝试显示image.png,我认为body = data不起作用,因为它无法像字符串一样保存图像?我不想将任何HTML放入我的js文件中。

2 个答案:

答案 0 :(得分:1)

查看the node.js example for a simple http server或教程/示例,例如this,通过简单的服务器提供静态文件。

答案 1 :(得分:1)

不要推送自己的应用服务器。使用其中一个优秀的网络应用框架,例如expressconnect

var express = require('express');
var app = express();

app.use(express.logger());
app.use(express.static(__dirname + '/public'));
app.listen(process.env.PORT || 5000);

相信我,这更好。