2013-09-02 5 views
0

Здравствуйте, я следую некоторым учебникам относительно node.js & experss.js. Что я создал до сих пор, это следующий код. Моя проблема заключается в том, что когда я запрашиваю такую ​​страницу, как: http://localhost:3000/test, она возвращает 404, как ожидалось. Также/ip и/работник работают нормально. Но когда я прошу, например http://localhost:3000/asdf/asdf браузер возвращает Cannot GET /asdf/asdfnode.js express routing 404 issue

Вот источник:

var cluster = require('cluster'); 

if (cluster.isMaster) { 

    var cpuCount = require('os').cpus().length; 
    var workers = []; 

    for (var i = 0; i < cpuCount; i++) { 
     workers[i] = cluster.fork(); 
     console.log('\t - Starting Worker (PID): ' + workers[i].process.pid); 
    } 

    console.log('\n\t - ' + cpuCount + ' Workers started.\n'); 

    cluster.on('exit', function (worker){ 

     console.log('\t - Worker ' + worker.id + ' with (PID): ' + worker.process.pid + ' died!'); 

     for (var i = 0; i < workers.length; i++) { 

      if (worker.process.pid === workers[i].process.pid) { 
       workers.splice(i, 1); 
       console.log('\t - Workers alive: ' + workers.length); 
      } 

     } 

     for (var i = 0; i < cpuCount - workers.length; i++) { 

      workers.push(cluster.fork()); 
      console.log('\t - Starting Worker with (PID): ' + workers[workers.length - 1].process.pid); 

     } 

    }); 

} else { 

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

    app.configure(function() { 
     app.set('views', __dirname + '/views'); 
     app.set('view engine', 'jade'); 

     app.use(express.bodyParser()); 
     app.use(express.methodOverride()); 
     app.use(app.router); 
     app.use(express.static(__dirname + '/public')); 
    }); 

    var server = require('http').createServer(app); 
    var io = require('socket.io').listen(server); 
    server.listen(3000); 

    app.get('/:page', function (req, res) { 

     var page = req.params.page; 

     switch(page) { 
     case '': 
      console.log('Page: ' + page); 
      res.sendfile(__dirname + '/index.html'); 
     break; 
     case 'ip': 
      res.send('Client ip address: ' + req.ip); 
     break; 
     case 'worker': 
      res.send('Worker ' + cluster.worker.id + ', with (PID): ' + cluster.worker.process.pid + ' replyed.'); 
     break; 
     default: 
      res.status(404).send('<h1>Page not found!</h1>'); 
     } 

    }); 


    console.log('\t - Worker ' + cluster.worker.id + ' up & running!'); 
} 

Может кто-то пожалуйста, объясните, почему оно не возвращает 404 и то, что я должен сделать, чтобы вернуть 404?

UPDATE

Кроме того, когда я прошу http://localhost:3000 я Cannot GET /

ответ

0

Это решение, которое я придумал в соответствии с: How to redirect 404 errors to a page in ExpressJS?

var cluster = require('cluster'); 

if (cluster.isMaster) { 

    var cpuCount = require('os').cpus().length; 
    var workers = []; 

    for (var i = 0; i < cpuCount; i++) { 
     workers[i] = cluster.fork(); 
     console.log('\t - Starting Worker (PID): ' + workers[i].process.pid); 
    } 

    console.log('\n\t - ' + cpuCount + ' Workers started.\n'); 

    cluster.on('exit', function (worker){ 

     console.log('\t - Worker ' + worker.id + ' with (PID): ' + worker.process.pid + ' died!'); 

     for (var i = 0; i < workers.length; i++) { 

      if (worker.process.pid === workers[i].process.pid) { 
       workers.splice(i, 1); 
       console.log('\t - Workers alive: ' + workers.length); 
      } 

     } 

     for (var i = 0; i < cpuCount - workers.length; i++) { 

      workers.push(cluster.fork()); 
      console.log('\t - Starting Worker with (PID): ' + workers[workers.length - 1].process.pid); 

     } 

    }); 

} else { 

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

    app.configure(function() { 
     app.set('views', __dirname + '/views'); 
     app.set('view engine', 'jade'); 

     app.use(express.bodyParser()); 
     app.use(express.methodOverride()); 
     app.use(app.router); 
     app.use(express.static(__dirname + '/public')); 
     app.use(function(req, res) { 
      res.status(404).end('<h1>Page not found!</h1>'); 
     }); 
    }); 

    var server = require('http').createServer(app); 
    var io = require('socket.io').listen(server); 
    server.listen(3000); 

    app.get('/', function (req, res) { 
     res.sendfile(__dirname + '/index.html'); 
    }); 

    app.get('/:page', function (req, res) { 

     var page = req.params.page; 

     switch(page) { 
      case 'ip': 
       console.log('Case -> ip'); 
       res.send('Client ip address: ' + req.ip); 
      break; 
      case 'worker': 
       console.log('Case -> Worker'); 
       res.send('Worker ' + cluster.worker.id + ', with (PID): ' + cluster.worker.process.pid + ' replyed.'); 
      break; 
     } 

    }); 

    console.log('\t - Worker ' + cluster.worker.id + ' up & running!'); 
}