Express学习
- API分析
- Set、Get
app.set('title', 'My Site');
app.get('title'); // "My Site"
app.get(“string”)和app.get(path, [callback...], callback)要区别开,前面一个函数是获取string的value,而后一个是路由函数。
下面的内建的可以改变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 模板的目录, 默认是"process.cwd() + ./views"
常用的set设置:
app.set('port', process.env.PORT || 3000); //设置端口
app.set('views', __dirname + '/views');
app.set('view engine', 'html');// app.set('view engine', 'ejs');
- app.engine(ext, callback)
注册模板引擎的 callback 用来处理ext扩展名的文件 默认情况下, 根据文件扩展名require() 对应的模板引擎。
app.engine('.html', ejs.__express);
app.engine('.ejs', ejs.__express);
app.engine('.jade', jade.__express);
- app.use([path], function)
使用中间件 function,可选参数path默认为"/"。这个中间件是nodejs最重要的功能,express也继承了中间件的功能。当path为\或者无时,也就意味着每一个页面每一个请求都会执行。根据这个功能可以使用中间件做路由。
app.use(function(req, res, next){
res.locals.user = req.session.user;
var err = req.session.error;
delete req.session.error;
res.locals.message = '';
if (err) res.locals.message = '<div class="alert alert-error">' + err + '</div>';
next();
});
这个函数会在每一个页面请求时都被调用。
app.use(express.static(path.join(__dirname, 'public')));,express.static( )是处理静态请求的,设置了public文件,public下所有文件都会以静态资料文件形式返回(如样式、脚本、图片素材等文件)
l 路由
app.use('/', routes);
app.use('/reg', reg);
app.use('/login', login);
app.use('/logout', logout);
l 供应器
它会针对请求进行回应,你可以根据你的需求使用多个中间件,Http请求将会通过每一个中间件直到其中一个中间件对请求进行回应。
app.use(express.favicon());
app.use(express.logger('dev'));
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(express.cookieParser());
app.use(express.cookieSession({secret : 'blog.fens.me'}));
app.use(express.session({
secret : 'blog.fens.me',
store: store,
cookie: { maxAge: 900000 } // expire session in 15 min or 900 seconds
}));
- app.VERB(path, [callback...], callback)
app.VERB() 方法为Express提供路由方法, VERB 是指某一个HTTP 动作, 比如 app.post()。 可以提供多个callbacks,这多个callbacks都将会被平等对待 ,它们的行为跟中间件一样,也有一个例外的情况,如果某一个callback执行了next('route'),它后面的callback就被忽略。这种情形会应用在当满足一个路由前缀,但是不需要处理这个路由,于是把它向后传递。
app.get('/', routes.index);
app.all('/login', notAuthentication);
app.get('/login', routes.login);
app.post('/login', routes.doLogin);
app.get('/logout', authentication);
app.get('/logout', routes.logout);
app.get('/home', authentication);
app.get('/home', routes.home);
//mongo
app.get('/movie/add',movie.movieAdd);
app.post('/movie/add',movie.doMovieAdd);
app.get('/movie/:name',movie.movieAdd);
app.get('/movie/json/:name',movie.movieJSON);
app.get('/users', user.list);
这个是一个路由函数,作用跟app.use('/', routes)一样。
- Request
l req.params
// GET /file/javascripts/jquery.js
req.params[0]
// => "javascripts/jquery.js"
// GET /user/tj
req.params.name
// => "tj"
附录:
nodeJs免安装环境下装express:
npm config set prefix " N:\nodejs" //设置npm install -g module时路径
npm config set cache "N:\ nodejs\node_cache"
“path”,输入"N:\nodejs" //设置node环境变量
“NODE_PATH”,输入“N:\nodejs\node_modules” //设置插件环境变量
npm install -g express@3.16.0
4.0时需要先安装npm install -g express-generator然后安装npm install -g express
npm uninstall moudleName: //卸载node模块