解读web框架express及基本配置项说明

来源:转载

学习了几天nodejs,从一开始学习就用到了express,当时只看到他可以快速搭建起web。在上手express的时候又学习了jade的javascript的模板。但是在学习了几天发现对express有些内置的方法或函数不了解,今天就了解一下express系统内部了的一些方法。 关于express的介绍就不不多说了,直接安装express/ -g是全局安装,也可以安装到当前的项目目录下
npm install -g express 安装完可以通过express --help可以查看其帮助
Usage: express [options] [dir]
Options:
-h, --help output usage information
-V, --versionoutput the version number
-s, --sessionsadd session support
-e, --ejsadd ejs engine support (defaults to jade)
-J, --jshtml add jshtml engine support (defaults to jade)
-H, --hoganadd hogan.js engine support
-c, --css add stylesheet support (less|stylus) (defaults to plain css)
-f, --forceforce on non-empty directory express 生成的web程序主文件是app.js,所以我们从这个文件入手,了解如何用express构建web程序。
创建 require之后创建一个express应用程序 var app = express(); 配置(下面是一段app.set & app.use):
// all environments
app.set('port', process.env.PORT || 3000);
app.set('views', __dirname + '/views');
app.set('view engine', 'jade');
app.use(express.favicon());
app.use(express.logger('dev'));
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(express.cookieParser('your secret here'));
app.use(express.session());
app.use(app.router);
app.use(require('less-middleware')({ src: __dirname + '/public' }));
app.use(express.static(path.join(__dirname, 'public')));
// development only
if ('development' == app.get('env')) {
app.use(express.errorHandler());
}
app.set用来设置环境变量,第一个参数是环境变量的name,第二个参数是值;在其它需要访问环境变量的地方,可以用
app.get获取,比如上面的app.get('env')。下面是一些内建express的环境变量env 运行时环境,默认为 process.env.NODE_ENV 或者 "development"
trust proxy 激活反向代理,默认未激活状态
jsonp callback name 修改默认?callback=的jsonp回调的名字
json replacer JSON replacer 替换时的回调, 默认为null
json spaces JSON 响应的空格数量,开发环境下是2 , 生产环境是0
case sensitive routing 路由的大小写敏感, 默认是关闭状态, "/Foo" 和"/foo" 是一样的
strict routing 路由的严格格式, 默认情况下 "/foo" 和 "/foo/" 是被同样对待的
view cache 模板缓存,在生产环境中是默认开启的
view engine 模板引擎
views 模板的目录
具体的基本配置项到这里查看
http://www.webipcode.com/archives/288 我们用到了最后两个,设置了页面显示的模板引擎和保存模板的目录。 设置app.use([path], function)是指在访问前缀为
path的路径执行时中间函数
function,上面的代码中没有指定
path,则表示在访问默认前缀
/的路径时执行中间函数
function。比如上面代码中的
app.use(require('less-middleware')({ src: __dirname +'/public'}));
app.use(express.static(path.join(__dirname,'public'))); 在访问请求静态文件
/stylesheets/style.css时,就会先执行less-middleware,再执行
express.static,返回
public/stylesheets/style.css给浏览器端。
app.use() 的出场顺序非常重要,use的先后顺序决定了中间函数的优先级。 比如
express.logger() 通常是第一个,可以记录全部请求。如果不想记录静态文件的请求,可以把less-middleware和
app.use(express.static)放到
logger前面。 在express以前的版本中有个app.configure()方法,该方法虽然仍得以保留,但推荐使用
if代替:
if('development'== app.get('env'))
路由 express的路由是用方法
app.VERB(path, [callback...], callback)设置的,在上面的代码中体现就是:
app.get('/', routes.index);
app.get('/users', user.list);
app.VERB() 中的 VERB 是指某一个HTTP 动作, 比如
app.get()、
app.post()。 每个path都可以对应多个callbacks,这些callbacks跟中间函数一样,按顺序逐一执行,但也有例外,如果某个callback执行了
next('route'),它后面的callback就被忽略。 前面的路径字符串path是当做正则表达式处理的,在遇到符合规则的http请求时执行callbacks。 path中不考虑请求参数,比如 "GET /" 会匹配下面的这个路由, 而"GET /?name=tobi"也会匹配。
app.get('/', routes.index); 目前对app.js的内部代码先了解到这里。具体的app.get & app.set的具体各种用法后面在介绍,查是在学习的过程,创建的内容很多。感觉也行乱,没有像php当中的mvc那样的结构明显,而且在app.js的代码也很多,不好梳理。所以就要对express的框架进行目录重构(这在开发项目的时候,根据项目的逐渐变大而调整目录结构是很经常的事),所以调整如下:
1、我们在学习或开发的过程当中会发现,app.js的路由代码会越来越多,所以就把路由的代码独立出来,在根目录下创建config目录,在创建router.js文件 //config/router.js
var routes = require('../app/controller');
var user = require('../app/controller/user');
var movies = require('../app/controller/movies');
var superagent = require('../app/controller/superagent');
module.exports = function(app) {
app.get('/', routes.index);
//user
app.get('/users', user.list);
app.post('/users/reg', user.reg);//post用户注册
app.get('/users/adduser', user.adduser);//添加用户
// movies
app.get('/movies',movies.index);//电影首页
app.get('/movies/view',movies.view);//电影详情页
// superagent || async
app.get('/superagent', superagent.index);//superagent请求网页爬虫
app.get('/superagent/eventurl', superagent.eventurl);//superagent请求网页爬虫之先获取列表的url地址。在获取文章内部的第一个评论内容
app.get('/superagent/async', superagent.async);//可以控制并发数量的异步操作
// app.get('/hello', routes.hello);//20140421添加
} 这样app.js就少了一部分代码。路由控制的也独立了,相对来说比较明确
2、对mvc的controller/model/view进行处理在根目录下创建app目录,在app目录下分别创建controller/model/view文件夹,然后把原来根目录下的router文件,复制到controller目录下,把根目录下view目录直接覆盖/app下的view目录,然后根目录下的model目录也直接覆盖。并改变原来相应的包含路径
3、在app.js中引入路由文件
//路由规则
require("./config/router")(app); 前台预览一切正常,可以正常访问,

分享给朋友:
您可能感兴趣的文章:
随机阅读: