2012-06-27 40 views
1

嗯 - 我读得越多,我就越困惑。所以这里的来源:对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'}); 
    } 
}); 

嗯它的工作,但我仍然没有得到这个要求/分辨率组合到我的头骨。 我很确定我不需要'*'那里作为参数。不过我不知道如何建立更好的解决方案 。任何简单的愚蠢愚蠢的例子,所以我可以想象如何 完全的魔术般的作品。

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

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

但这并不

server.get(function (req, res) { 

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

+0

这看起来并不像我一样快。你甚至没有在任何地方定义'req'和'res',所以我很惊讶它甚至可以工作。看看例子:https://github.com/visionmedia/express/tree/master/examples –

+0

我不想发布整个事情。 – Inoperable

+0

对不起 - 你是对的我发布了错误的东西!刚刚reedited – Inoperable

回答

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

,...等

'*'您使用的只是被动地接受所有路由。类似于通配符!

+0

是的,但以下约定至今没有带来理解;) – Inoperable

+0

所以你还没有得到什么第一个参数是什么? – c0deNinja

+0

.get方法第一个参数是要解析的快速路由名称 – Inoperable