Sep 10, 2012 - node.js    No Comments

Node.js Express.js 学习笔记(1)

先来看一下生成的app.js的代码,这是项目的入口:

/**
 * Module dependencies.
 */

var express = require('express')
  , routes = require('./routes')
  , user = require('./routes/user')
  , http = require('http')
  , path = require('path');

var app = express();

app.configure(function(){
  app.set('port', process.env.PORT || 3000);
  app.set('views', __dirname + '/views');
  app.set('view engine', 'ejs');
  app.use(express.favicon());
  app.use(express.logger('dev'));
  app.use(express.bodyParser());
  app.use(express.methodOverride());
  app.use(express.cookieParser('your secret here'));
  app.use(express.session());
  app.use(app.router);
  app.use(require('stylus').middleware(__dirname + '/public'));
  app.use(express.static(path.join(__dirname, 'public')));
});

app.configure('development', function(){
  app.use(express.errorHandler());
});

app.get('/', routes.index);
app.get('/users', user.list);

http.createServer(app).listen(app.get('port'), function(){
  console.log("Express server listening on port " + app.get('port'));
});

一行一行来看代码:

var express = require('express')
  , routes = require('./routes')
  , user = require('./routes/user')
  , http = require('http')
  , path = require('path');

首先导入了express模块,http和path也都是必须要用到的核心模块。
routes是一个文件夹形式的本地模块,其实就是指向了 ./routes/index.js
user其实就是指向了routes文件夹下的user.js文件。

app.get('/', routes.index);
app.get('/users', user.list);

访问 http://127.0.0.1:3000/ 其实就是由routes分配给了routes.index来控制。
这里的index并不是./routes/ 文件夹下的index.js文件,而是index.js里的一个函数,看代码:

exports.index = function(req, res){
  res.render('index', { title: 'Express' });
};

也就是说访问 http://127.0.0.1:3000/ 这个根目录,会把路径’/’映射到exports.index函数下。
这个函数只有一行代码:

res.render('index', { title: 'Express' });

功能就是调用模板引擎,解析名为index的模板,并把一个对象传给index模板,这个对象就是{ title: ‘Express’ }

以下就是位于./views/index.ejs的代码,index.ejs就是模板文件:

<!DOCTYPE html>
<html>
  <head>
    <title><%= title %></title>
    <link rel='stylesheet' href='/stylesheets/style.css' />
  </head>
  <body>
    <h1><%= title %></h1>
    <p>Welcome to <%= title %></p>
  </body>
</html>

也就是我们看到的:

——–路径的分割线———

接下来我们访问 http://127.0.0.1:3000/users
根据上面的经验,我们知道首先当我们访问 ‘/users’ 这个路径时,路由器把这个路径分配给了 ‘user.list’, 这里的user 指向了 ‘./routes/user.js’;
‘user.list’ 即 user.js里的 exports.list 函数,看user.js的代码:

exports.list = function(req, res){
  res.send("respond with a resource");
};

这里没有调用模板,而是直接输出了一句话”respond with a resource”!

Got anything to say? Go ahead and leave a comment!