express中路由设置的坑-----1
1 router.get('/commodities/sortable', utils.logged, function (req, res) { 2 Commodity.find({force_top:true}).sort("-force_top position -at").exec(function(err, items) { 3 res.render('commodities/sortable', {items:items, current: req.user}); 4 }); 5 //Commodity.find({force_top:true},function(error,docs){ 6 // if(error){ 7 // console.log(error) 8 // }else{ 9 // res.render('commodities/sortable', {items:docs, current: req.user}); 10 // } 11 //}); 12 // res.render('commodities/sortable'); 13 14 }); 15 //商品排序2 16 router.post('/commodities/sortable', utils.logged, function (req, res) { 17 var list = req.body.list; 18 var bulk = Commodity.collection.initializeUnorderedBulkOp({useLegacyOps: true}); 19 _.each(list, function(item, i) { 20 bulk.find({_id: new ObjectID(item.id)}).update({$set: {position: parseInt(item.position)}}); 21 }); 22 23 bulk.execute(function (err, result) { 24 if(err) console.error(err); 25 res.json(result); 26 }); 27 }); 28 29 30 31 router.get('/commodities/:id', utils.logged, function (req, res) { 32 thenjs.parallel([ 33 function(cb) { 34 Commodity.findById(req.params.id).populate("tags").deepPopulate(commodity_deep_items).exec(function (err, item) { 35 if (item) item.photos = _.sortBy(item.photos, 'position'); 36 cb(err, item); 37 }); 38 }, 39 function(cb) { 40 Zan.find({commodity:req.params.id}).populate('user').exec(function(err, zans) { cb(err, zans); }); 41 }, 42 function(cb) { 43 Category.find({ancestry:null}).exec(function(err, items) { cb(err, items); }); 44 }, 45 function(cb) { 46 Comment.find({commodity:req.params.id}).populate('user').exec(function(err, comments) { cb(err, comments); }); 47 } 48 ]).then(function(cb, results) { 49 var taglist = {}; 50 51 _.each(TagList, function(t) { 52 _.set(taglist, t.v, t.d); 53 }); 54 55 res.render('commodities/edit', {item:results[0], zans:results[1], current: req.user, categories: results[2], comments:results[3], taglist: taglist, moment:utils.moment}); 56 }); 57 });
主要是第一行与第三十一的路由设置,此两处路由设置若是颠倒位置,就会报错,原因就是,第二处路由,
/commodities/:id
此处路由 :id 可以是任意字符串,包括第一行路由设置的 sortable 若是第三十一行的路由排在前面 当请求/commodities/sortable 时,会进入/commodities/:id 路由,进入后找不到就会产生错误;
此处不知道能不能加一个next()处理,若是错误 next()继续执行,因为回调函数中省掉了next参数
坚持下去就能成功