使用express(1) 来生成一个应用程序

Express团队维护了一个可以快速生成项目模板的可执行文件,这里命名为express(1). 如果你使用npm全局安装的express-generator, 在你的机器任何位置它都是可用的:
$ npm install -g express-generator

这个工具提供了一个非常简单的生成一个程序骨架的功能,但是它也有局限,比如它只支持很少的几个模板引擎。 而事实上Express几乎支持所有的为node所建的模板引擎。 使用 --help查看一下帮助:
Usage: express [options]

Options:

  -h, --help          输出帮助信息
  -V, --version       输出版本号
  -e, --ejs           添加 ejs 模板引擎支持 (默认为jade)
  -H, --hogan         添加 hogan.js模板引擎支持
  -c, --css   样式 <引擎> 支持 (less|stylus) (默认为css)
  -f, --force         强制在非空目录执行
如果你想生成一个支持Jade, Stylus的应用程序,只需要简单的执行下面的命令:
$ express --css stylus myapp

和其它node程序一样,你必须安装依赖:
$ cd myapp && npm install
打开app.js 在module.exports = app;之前加上
app.listen(3000);
然后让我们运行它吧!
$ node app

这些就是一个简单的应用程序创建和运行的所有步骤。 记住Express没有限定任何的目录结构,这只是一个方便你工作的基本结构。 如果你想得到更多怎么组织目录结构选择,可以查看github上的示例

错误处理

错误处理的中间件和普通的中间件定义是一样的, 只是它必须有4个形参,这是它的形式: (err, req, res, next):
app.use(function(err, req, res, next){
  console.error(err.stack);
  res.send(500, 'Something broke!');
});
一般来说非强制性的错误处理一般被定义在最后,下面的代码展示的就是放在别的 app.use() 之后:
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(app.router);
app.use(function(err, req, res, next){
  // logic
});
在这些中间件里的响应是可以任意定义的。只要你喜欢,你可以返回任意的内容,譬如HTML页面, 一个简单的消息,或者一个JSON字符串。 对于一些组织或者更高层次的框架,你可能会像定义普通的中间件一样定义一些错误处理的中间件。 假设你想定义一个中间件区别对待通过XHR和其它请求的错误处理,你可以这么做:
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(app.router);
app.use(logErrors);
app.use(clientErrorHandler);
app.use(errorHandler);
通常logErrors用来纪录诸如stderr, loggly, 或者类似服务的错误信息:
function logErrors(err, req, res, next) {
  console.error(err.stack);
  next(err);
}
clientErrorHandler 定义如下,注意错误非常明确的向后传递了。
function clientErrorHandler(err, req, res, next) {
  if (req.xhr) {
    res.send(500, { error: 'Something blew up!' });
  } else {
    next(err);
  }
}
下面的errorHandler "捕获所有" 的异常, 定义为:
function errorHandler(err, req, res, next) {
  res.status(500);
  res.render('error', { error: err });
}