NodeJs从零单排第七期

看看app.js这个文件。

var express = require('express');
var path = require('path');
var favicon = require('serve-favicon');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');

var routes = require('./routes/index');
var users = require('./routes/users');

var app = express();

前面6行请求了系统模块。接着2行请求了routes下的路由文件。
var app = express();  生成一个express实例。

// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');

注释已经很清楚了,视图引擎设置。第一行设置使用views文件夹存放模版,第二行设置使用jade作为模版引擎。

// uncomment after placing your favicon in /public
//app.use(favicon(__dirname + '/public/favicon.ico'));
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));

app.use('/', routes);
app.use('/users', users);

前2行看翻译,取消注释后放置你的favicon图标在public目录下。
app.use(logger('dev'));  加载日志中间件。

app.use(bodyParser.json());  加载解析json的中间件。

app.use(bodyParser.urlencoded({ extended: false }));  加载解析urlencoded请求体的中间件。

app.use(cookieParser());  加载解析cookie的中间件。

app.use(express.static(path.join(_dirname, 'public')));  设置public文件夹为存放静态文件的目录。

最后2行为路由控制器。

这里反复提到了中间件这个概念。英文单词为middleware。

简单理解就是处理一个事件的中间过程,当一个请求过来的时候,会依次被这些中间件处理。

其实这里用到了NodeJs的中间件框架Connect。express是基于Connect开发的。

express的use方法用于加载中间件。

// catch 404 and forward to error handler
app.use(function(req, res, next) {
    var err = new Error('Not Found');
    err.status = 404;
    next(err);
});

同样,我们翻译注释。捕获404错误并转发到错误处理器。

// error handlers

// development error handler
// will print stacktrace
if (app.get('env') === 'development') {
    app.use(function(err, req, res, next) {
        res.status(err.status || 500);
        res.render('error', {
            message: err.message,
            error: err
        });
    });
}

这里就是错误处理器,开发环境下的错误处理器,将打印堆栈轨迹。
会渲染views下error.jade页面并将错误信息显示到浏览器中。

// production error handler
// no stacktraces leaked to user
app.use(function(err, req, res, next) {
    res.status(err.status || 500);
    res.render('error', {
        message: err.message,
        error: {}
    });
});


module.exports = app;

生产环境下的错误处理器,没有堆栈跟踪泄露给用户。
会渲染views下error.jade页面并将错误信息显示到浏览器中。

最后将app实例封装成模块。

 

posted @ 2014-12-18 09:43  webyun  阅读(142)  评论(0)    收藏  举报