簡體   English   中英

對 Expressjs / Nodejs 請求感到困惑 - 響應處理

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

好吧 - 我讀得越多,我就越困惑。 所以這里的來源:

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 組合記入我的頭骨。 我很確定我不需要'*'作為參數。 但是我不知道如何建立更好的解決方案。 任何簡單的愚蠢愚蠢的例子,所以我可以想象魔術究竟是如何運作的。

為了簡化我的謎語,我想知道(並理解)為什么會這樣:

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

等等……

您使用的'*'只接受所有路由。 類似於通配符!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM