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

Javascript 对Expressjs/Nodejs请求-响应处理感到困惑,javascript,node.js,javascript-events,express,Javascript,Node.js,Javascript Events,Express,嗯,我读得越多,我就越困惑。因此,来源如下: 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.con

嗯,我读得越多,我就越困惑。因此,来源如下:

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'});
  }
});
好吧,它工作了,但我还是没有把那个请求/回复组合放到我的脑袋里。 我很确定我不需要
“*”
作为参数。但是我不知道该怎么做 建立一个更好的解决方案。任何简单的愚蠢的Exmaple这样我就能想象 正是这种魔法起作用了

为了简化我的谜语,我想知道(并理解)为什么这样做有效:

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


您正在使用的
“*”
只接受所有路由。类似于通配符

我认为第一个参数是路线。您可以将代码分成以下几部分,这可能更有意义,并遵循惯例:

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


您正在使用的
“*”
只接受所有路由。类似于通配符

在我看来,这根本不像是快车。您甚至没有在任何地方定义
req
res
,所以我很惊讶它居然能工作。请看下面的例子:我不想发布全部内容。对不起,你是对的,我发布了错误的内容!只是Reedidthis在我看来根本不像Express。您甚至没有在任何地方定义
req
res
,所以我很惊讶它居然能工作。请看下面的例子:我不想发布全部内容。对不起,你是对的,我发布了错误的内容!仅仅是Reediteyah,但到目前为止,遵循惯例并不能带来理解;)因此,您仍然不知道第一个参数是什么?.get方法1st param是express要解析的路由名称,但以404='*'处理所有其他路由也不是最好的方法。我的意思是如果请求了一条不存在的路由-转发到/404。如何处理req中不存在的路径?如果定义了路由,express将找到它。如果不是,则属于“*”。这就是你们如何处理不存在的路径。是的,但到目前为止,遵循惯例并不能带来理解;)因此,您仍然不知道第一个参数是什么?.get方法1st param是express要解析的路由名称,但以404='*'处理所有其他路由也不是最好的方法。我的意思是如果请求了一条不存在的路由-转发到/404。如何处理req中不存在的路径?如果定义了路由,express将找到它。如果不是,则属于“*”。这就是处理不存在路径的方法。