express框架基本描述
通过express自带的创建方式创建项目后,项目文件夹内一般包含这几个内容
bin文件夹:该文件只包含了www这个文件,是用于web应用启动的
node_module文件夹:包含了该项目依赖的包和模块
public文件夹:存放静态文件,包括图片、css等
routes文件夹:存放该框架MVC中的C(控制)部分
views文件夹:存放该框架MVC中的V(视图)部分
app.js文件:对该应用进行配置
package.json:该web应用的基本信息,npm install根据该信息可以为应用安装所需的依赖
关于express的各种方法
express的各种方法主要用在app.js文件中,在该文件中进行一些路由设置、模版引擎设置、文件路径设置等。
set方法
set方法主要是设置一些参数,当前set主要用的是以下两句
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');
第一句表示设置前台模版的路径为工程文件夹下的views文件夹下
第二句表示使用的前台模版引擎为ejs
use方法
use方法表示设置当用户访问时将调用设定的中间件,基本用法如下:
app.use(function(req, res, next){
//dosometing;
next();
});
所谓的中间件,可以理解为从底层往上层传输前,进行一定处理的函数或过程。当有用户访问web应用时,便会调用use方法设置好的中间件函数,在该函数处理完之后,调用了next()方法,该方法调用下一个设置好的中间件函数
在上面的use用法中,所有用户请求都会调用设置的中间件函数。为了只让某些用户请求调用特定的中间件函数,use还提供了如下用法:
app.use("/", function(req, res, next){
//dosomething;
next();
});
该语句中只对根目录的请求调用该中间件函数
get方法
get方法也是设置中间件函数,它的特点在于只响应用户的get方法请求,并且没有像use那样具备next()方法。
app.get("/", function(req, res){
//dosomething;
});
上面的代码会响应用户对根目录的get请求
post方法
post方法与get方法类似,特点是只响应用户的post方法请求,其余与get类似,不做介绍
all方法
用户对all方法指定路径的所有访问,都会得到all方法的响应,可以吧all方法看作是get和post方法的结合。
纵观app.js
//app.js
var express = require('express');
var path = require('path');
var favicon = require('static-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();
// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');
app.use(favicon());
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded());
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
app.use('/', routes);
app.use('/users', users);
/// catch 404 and forward to error handler
app.use(function(req, res, next) {
var err = new Error('Not Found');
err.status = 404;
next(err);
});
/// 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
});
});
}
// 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;
以上就是express快速新建一个项目时生成的app.js文件,下面对其中的部分语句进行解析
app.use(favicon());
favicon()属于connect框架(Node.js一个中间件框架)的内建中间件,使用默认favicon图标,如果想让项目改用自己的图标,则改为:
app.use(favicon(__dirname + "/public/images/myIcon.ico")));
之后访问localhost:3000/favicon.ico刷新缓存。根据笔者调试和阅读源码,除非访问/favicon.ico,否则无法刷新图标,因此建议考虑在html页面中获取图标资源
</pre><pre name="code" class="plain">
app.use(logger('dev'));
该语句定义项目以开发模式启动,在该模式下,当用户进行访问时,会有如下输出
app.use(bodyParser.json());
app.use(bodyParser.urlencoded());
以上语句用于解析请求体