1 //两种路由写法,一种封装成函数,返回结果,此种方法可以传递参数, 2 "use strict"; 3 var _ = require("lodash"); 4 var express = require('express'); 5 var router = express.Router(); 6 var thenjs = require('thenjs'); 7 8 module.exports = function(utils) { 9 10 //* 广告 API */ 11 router.get('/api/ads/:type', function (req, res) { 12 res.setHeader("Expires", new Date(Date.now() + 60 * 60 * 1000 * 2).toUTCString()); 13 var start = utils.moment().startOf('day'); 14 var end = utils.moment().endOf('day'); 15 16 // 有时间限制且在时间限制内, 或者无时间限制的广告 17 var or = [{start: {'$gte':start}, end: {'$lte': end}}, {start: {$exists: false}, end: {$exists: false}}, {start: null, end: null}]; 18 Ad.find({type:req.params.type}).or(or).sort('-start position').exec(function(err, ads) { 19 res.json({items:ads}); 20 }); 21 }); 22 23 return router; 24 }; 25 26 //第二种写法: 27 var express = require('express'); 28 var router = express.Router(); 29 30 // 该路由使用的中间件 31 router.use(function timeLog(req, res, next) { 32 console.log('Time: ', Date.now()); 33 next(); 34 }); 35 // 定义网站主页的路由 36 router.get('/', function(req, res) { 37 res.send('Birds home page'); 38 }); 39 // 定义 about 页面的路由 40 router.get('/about', function(req, res) { 41 res.send('About birds'); 42 }); 43 44 module.exports = router; 45 46 //第二种明显不能传递参数, 47 48 //第一种比较巧妙,将全局都用到的变量收集到名为utlis的对象中; 49 //模块再封装时,传入一个对象形参,完成功能配置; 50 //将此页面引入到app.js中将参数传入进去,完成功能;