简体   繁体   English

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

[英]Confused about Expressjs / Nodejs Request - Response handling

Well - the more I read the more confused I get.好吧 - 我读得越多,我就越困惑。 So here the source:所以这里的来源:

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

Well it's working, but I still don't get that req/res combo into my skull.好吧,它起作用了,但我仍然没有将 req/res 组合记入我的头骨。 I'm pretty sure I don't need '*' there as a parameter.我很确定我不需要'*'作为参数。 However I don't know how to build up a better solution.但是我不知道如何建立更好的解决方案。 Any simple dumb stupid exmaples so I could visualize how exactly the magic works.任何简单的愚蠢愚蠢的例子,所以我可以想象魔术究竟是如何运作的。

To simplify my riddle I'd like to know (and understand) why this works:为了简化我的谜语,我想知道(并理解)为什么会这样:

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

but this doesn't但这并没有

server.get(function (req, res) {

the first parameter is always being handled as what exectly?第一个参数总是被当作什么来处理?

I believe the first parameter is the route.我相信第一个参数是路线。 You can break up your code into the following which might make more sense, and would follow convention:您可以将代码分解为以下内容,这可能更有意义,并遵循约定:

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

And so forth...等等……

The '*' that you are using just accepts all routes.您使用的'*'只接受所有路由。 Similar to a wildcard!类似于通配符!

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM