使用 Express 框架来开发 Node.js 应用

前(che)言(dan)

由于毕业设计想尝试着使用 Node.js 来做一个应用,因此便接触了 Express 这个已有的 Web 开发框架。
有了 Express 这个框架,就可以省去自己手动实现小到一个 POST 请求,大到 Cookie、会话的管理的精力,避免了重复造轮子。

Express 实现的功能

  • 为 http 模块提供了更高层的接口,而不用直接使用 Node.js 的 http 模块提供的底层接口
  • 路由控制
  • 模版解析支持
  • 动态视图
  • 用户会话
  • CSRF 保护
  • 静态文件服务
  • 错误控制器
  • 访问日志
  • 缓存
  • 插件支持

Express 工程的结构

|—— bin/
|
|—— node_modules/
|
|—— public/
| |
| |—— images/
| |—— javascripts/
| |—— stylesheets/
|
|—— routes/ 为指定路径组织返回内容,相当于 MVC 架构中的控制器
| |
| |—— index.js 路由文件,相当于控制器,用于组织展示的内容
|
|—— views/
| |
| |—— index.jade 模版文件,当前为 routes/index.js 中调用的模版
|
|—— app.js 工程的入口
|
|—— package.json

各文件说明

app.js

app 对象一般情况下都是指向 Express 应用,通过调用 Express 模块的 express() 方法创建

var express = require('express');
var app = express();

app 对象配有一些成员方法:

  • app.METHOD 和 app.param,用来处理路由 HTTP 请求
  • app.route,用来配置中间件
  • app.render,渲染 HTML 视图
  • app.engine,注册模版引擎

app.set 是 Express 的参数设置工具,接受一个 key 和一个 value
可用的参数有:

  • basepath:基础地址,通常用于 res.redirect() 跳转
  • views:视图文件的目录,存放模版文件
  • view engine:视图模版引擎
  • view cache:启用视图缓存
  • case sensitive route:路径区分大小写
  • strict routing:严格路径,启用后不会忽略路径末尾的“/”
  • jsonp callback:开启透明的 JSONP 支持
    app.set('title','My Site');

app.get 可以获取 setting 里 key 对应的 value
eg: app.get(‘/‘,routes.index); 是一个路由控制器,用户如果访问“/”路径,则由 routes.index 来控制

app.use 用来启用大量的中间件
(在 Express3.X 时依赖于 Connect)
(而在4.X开始,除了 Static 其余则被分离成独立的模块,需要单独安装,使用 require 调用)

var morgan = require('morgan'); //logger模块的这个新名字真是神奇
var bodyParser = require('body-parser');
var methodOverride = require('method-override');
app.use(express.static(__dirname + '/public'));
app.use(morgan('dev'));
app.use(bodyParser());
app.use(methodOverride());