简体   繁体   中英

Using node-static and journey together

I'm using Node.js for the first time. I'm serving up static files with node-static and routing with journey . Unfortunately the two seem to conflict with each other, and I'm not sure of the best way to stop the conflict. My server looks like this:

var http = require('http');
var nodeStatic = require('node-static');
var journey = require('journey');

var fileServer = new nodeStatic.Server('./public');
var router = new journey.Router;


module.exports = http.createServer(function (req, res) {
  router.get('/api').bind(function (req, res) {
    res.send(200);
  });
var fileServer = new nodeStatic.Server('./public');
var router = new journey.Router;


module.exports = http.createServer(function (req, res) {
  router.get('/api').bind(function (req, res) {
    res.send(200);
  });

  req.addListener('end', function () {
    fileServer.serve(req, res);

    router.handle(req, '', function (result) {
      res.writeHead(result.status, result.headers);
      res.end(result.body);
    });
  });
});

The problem with this is that the Journey router sends a 404 response. The only way I've managed to make it work is by doing this in the end listener:

  req.addListener('end', function () {
    router.handle(req, '', function (result) {
      if (result.status === 404) {
        fileServer.serve(req, res);
      }
      else {
        res.writeHead(result.status, result.headers);
        res.end(result.body);
      }
    });
  });

but this doesn't seem like the way I should be handling things. What am I doing wrong?

I found a gist showing how to use node-static with journey . I basically had it right. I'd be happy to hear any alternative solutions though!

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM