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

那么 – 我读得越多,我就越困惑。 所以这里的来源:

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 /水库组合到我的头骨。 我很确定我不需要'*'作为参数。 但是我不知道如何build立一个更好的解决scheme。 任何简单的愚蠢愚蠢的例子,所以我可以想象如何神奇的作品。

为了简化我的谜语,我想知道(并理解)为什么这个工作:

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

但是这不

 server.get(function (req, res) { 

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

我相信第一个参数是路线。 你可以把你的代码分解成下面这些可能更有意义的代码,并遵循约定:

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

等等…

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