**
Express框架文件解析
**
目录结构1.1 app.js:启动文件,或者说是入口文件
1.2 package.json:存储着工程的信息及模块依赖,当在dependencies中添加依赖的模块时,运行npm install,npm会检查当前目录下的package.json,并自动安装所有指定的模块。
1.3 node_modules:存放package.json中安装的模块,当你在package.json添加依赖的模块并安装后,存放在这个文件夹下。
1.4 public:存放image、css、js等文件
1.5 routes:存放路由文件
1.6 views:存放视图文件或者说模板文件
1.7 bin:存放可执行文件
路由规则
express封装了多种http请求方式,我们主要只使用get和post两种,即app.get()和app.post()。app.get()和app.post()的第一个参数都为请求的路径,第二个参数为处理请求的回调函数,回调函数有两个参数分别是req和res,代表请求信息和响应信息。路径请求及对应的获取路径有以下几种形式:
2.1 req.query:处理get请求,获取get请求参数。
2.2 req.params:处理/:xxx形式的get或post请求,获取请求参数
2.3 req.param():处理get和post请求,但查找优先级油高到低req.params->req.body->req.query。
app.js
通过require()加装了express、path等模块,以及routes文件夹下的index.js和users.js路由文件。
3.1生成一个express实例app。
var app = express();
3.2设置 views 文件夹为存放视图文件的目录, 即存放模板文件的地方,__dirname 为全局变量,存储当前正在执行的脚本所在的目录。
app.set('views', path.join(__dirname, 'views'));
3.3设置视图模板引擎为 ejs。
app.set('view engine', 'ejs');
3.4加装解析json的中间件
app.use(bodyParser.json());
3.5 加装日志中间件
app.use(logger('dev'));
3.6 加载解析urlencoded请求体的中间件。
app.use(bodyParser.urlencoded({ extended: false }));
3.7加载解析cookie的中间件。
app.use(cookieParser());
3.8 设置public文件夹为存放静态文件的目录。
app.use(express.static(path.join(__dirname, 'public')));
3.9 路由控制器。
app.use('/', routes); app.use('/users', users);
3.10 捕获404错误,并转发到错误处理器。
app.use(function(req, res, next) { var err = new Error('Not Found'); err.status = 404; next(err); });
3.11 开发环境下的错误处理器,将错误信息渲染error模版并显示到浏览器中。
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 }); }); }
3.12 生产环境下的错误处理器,不会将错误信息泄露给用户。
app.use(function(err, req, res, next) { res.status(err.status || 500); res.render('error', { message: err.message, error: {} }); });
3.13 导出app实例供其他模块调用。
module.exports = app;
routes/index.js 文件:
4.1生成一个路由实例用来捕获访问主页的GET请求,导出这个路由并在app.js中通过app.use(‘/’, routes); 加载。这样,当访问主页时,就会调用res.render(‘index’, { title: ‘Express’
});渲染views/index.ejs模版并显示到浏览器中。