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参数
坚持下去就能成功
原文地址:https://www.cnblogs.com/suoking/p/4868712.html