对Expressjs / Nodejs请求感到困惑 - 响应处理

时间:2012-06-27 18:33:03

标签: javascript node.js javascript-events express

嗯 - 我读的越多,我就越困惑。所以来源:

var express = require('express')
  , http = require('http')
  , server = express()
  ;

var home = require('./routes/home.js')
  , about = require('./routes/about.js')
  , contact = require('./routes/contact.js');

  server.configure(function () {
  server.set('port', process.env.PORT || 3000);
  server.set('view engine', 'hjs');
  server.set('views', __dirname + '/views');
  server.use(express.logger());
  server.use(server.router);
  server.use(express.favicon());
  server.use(require('stylus').middleware(__dirname + '/public'));
  server.use(express.static(__dirname + '/public'));
  server.use(express.bodyParser());
  server.use(express.cookieParser('your secret here'));
  server.use(express.methodOverride());
  server.use(express.session());
});

server.get('*', function (req, res) {
  switch (req.path) {

    case '/':
      res.render('home', { title:'Home Page' });
      break;

    case '/about/':
      res.render('home', { title:'About Page' });
      break;

    case '/contact/':
      res.render('contact', { title:'Contact Page' });
      break;

    default:
      res.render('home', { title:'404 - Page not found'});
  }
});

嗯它正在工作,但我仍然没有将req / res组合到我的头骨中。 我很确定我不需要'*'作为参数。但是我不知道该怎么做 建立更好的解决方案。任何简单的愚蠢的愚蠢的exmaples所以我可以想象如何 完全是神奇的作品。

为了简化我的谜语,我想知道(并理解)为什么会这样做:

server.get('*', function (req, res) {

但这不是

server.get(function (req, res) {

第一个参数总是被处理为什么?

1 个答案:

答案 0 :(得分:1)

我相信第一个参数是路线。您可以将代码分解为以下可能更有意义的代码,并遵循惯例:

server.get('/', function (req, res) {
    res.render('home', { title:'Home Page' });
})

server.get('/contact/', function (req, res) {
    res.render('contact', { title:'Contact Page' });
});

server.get('*', function (req, res) {
    res.render('Page Not Found', 404);
});

等等......

您使用的'*'只接受所有路线。类似于通配符!