如何在不使用npm包的情况下编写vanilla nodejs路由器

时间:2016-04-27 00:25:12

标签: javascript node.js

例如我有一个server.js

'use strict';
var http, bunyan, config;

config   = require('config');
http     = require('http');
bunyan   = require('bunyan');

//require('./routes/'); ?

process.env.TZ = 'UTC';
process.env.NODE_ENV =  process.env.NODE_ENV || 'staging';
var environment   = config.get('environment');

var log = bunyan.createLogger({
  name        : 'index',
  level       : 'debug',
  stream      : process.stdout,
  });

var server = http.createServer(function (request, response) {
  response.writeHead(200,
  {'Content-Type'   : 'text/plain'});
});

server.on('error', function(error){
  log.error('Errored with the message: ',error);
  process.exit(1);
});

server.listen(environment.port);
log.info(process.env.NODE_ENV);
log.info('Server running at http://0.0.0.0:'+environment.port+'/');

我有三个控制器Blog,Todo和Auth在restify,express或hapi中执行此操作是微不足道的但是如何在不使用任何npm包的情况下编写路由文件?

我需要写require(./routes)(server)吗?然后function routes(server) {} module.exports = routes

有更可读的方式吗?

1 个答案:

答案 0 :(得分:5)

您还需要导入url来解析网址,然后检查路径。从那里你可以发回你想要的东西,在下面的代码中它是一个文件中的图像:

注意这基本上就是adeneo在上面评论中所说的内容!

http.createServer(function (request, response) {
  var path = url.parse(request.url, true).pathname;

  if (request.method === 'POST') {
    if (path === '/hifive') {
      response.writeHead(200,{'Content-Type':'image/jpg'});
      fs.readFile(__dirname + '/assets/hifive.jpg', function(err, data) {
        if (err) console.log(err);
        response.end(data, 'utf-8');
      })
    }
    else {
     response.end(404);
   }
 }