1

うーん、読めば読むほど混乱します。だからここにソース:

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'});
  }
});

それはうまくいっていますが、私はまだ要求/応答のコンボを私の頭蓋骨に入れていません。'*'パラメータとして必要ないことは確かです。ただし、より良いソリューションを構築する方法がわかりません。魔法がどのように機能するかを正確に視覚化できるように、単純で愚かな例。

私のなぞなぞを単純化するために、なぜこれが機能するのかを知りたい(そして理解したい):

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

しかし、これはそうではありません

server.get(function (req, res) {

最初のパラメーターは常に何として処理されますか?

4

1 に答える 1

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);
});

などなど…

使用'*'している は、すべてのルートを受け入れるだけです。ワイルドカードに似ています!

于 2012-06-27T19:11:08.160 に答える