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参数
时间: 2024-11-04 17:15:17

express中路由设置的坑-----1的相关文章

浅析Express中的路由与应用模式

1. 引言 Express是一个基于Node.js的轻量级web开发框架,具有体积小,使用灵活等特点.查看Express的源码,如果不计供使用的中间件,主体框架只有一千余行代码,非常简练. Express模型的核心为Express中定义的路由和路由器.分析Express源码可发现Express的路由提供多种灵活的应用模式. 我们首先介绍一下Express中的路由.路由器相关概念.结构及其特点,然后针对典型场景描述使用Express路由的四种应用模式. 2.Express中的路由与路由器 Expr

MVC中如何设置路由指定默认页

MVC中怎么设置默认页,在webform中 只要右键设置起始页就可以,但MVC中却没有这个功能,其实MVC更简单 如下: Login是控制器,Index 是动作 在全局Global.asax中改动下即可 这个是针对area的默认页 namespaces:默认页的命名空间 DataTokens:该area的键值对 routes.MapRoute( name: "Default", url: "{controller}/{action}/{id}", defaults:

express 中文文档

express() 创建一个express应用程序 var express = require('express'); var app = express(); app.get('/', function(req, res){ res.send('hello world'); }); app.listen(3000); Application app.set(name, value) 将设置项 name 的值设为 value app.set('title', 'My Site'); app.ge

node.js零基础详细教程(5):express 、 路由

第五章 建议学习时间4小时  课程共10章 学习方式:详细阅读,并手动实现相关代码 学习目标:此教程将教会大家 安装Node.搭建服务器.express.mysql.mongodb.编写后台业务逻辑.编写接口,最后完成一个完整的项目后台,预计共10天课程. express Express 是一个基于 Node.js 平台的极简.灵活的 web 应用开发框架,它提供一系列强大的特性,帮助你创建各种 Web 和移动设备应用. 其实可以简单的将express理解为node.js的一个类库:我们在使用j

Express中文文档

Express 4.x API express 翻译 api文档 中文 -- express() express()用来创建一个Express的程序.express()方法是express模块导出的顶层方法. var express = require('express'); var app = express(); Methods express.static(root, [options]) express.static是Express中唯一的内建中间件.它以server-static模块为

记一次SpringBoot 开发中所遇到的坑和解决方法

记一次SpringBoot 开发中所遇到的坑和解决方法 mybatis返回Integer为0,自动转型包空指针异常 当我们使用Integer去接受数据库中表的数据,如果返回的数据中为0,那么Integer便为null,这时候将Interger自动转型为int,则会出现空指针异常 这个时候,我们可以在Service层对Integer的数据进行判断,如果为空,就把它复制为0 // 在pojo中,如果Integer canJoinNun为null 就把值设置为0 if (publishMsg.getC

2019爬虫项目总结——我在项目中踩的那些坑

2019刚出校门,初到公司,最大的成就是完成了一个全球抓取数据的系统!简单介绍一下这个项目的实现思路以及在项目中踩过的坑,随时告诫自己以后尽量避免! 历时一个半月还多几天,终于通过交付测试了!项目是从全球范围内,通过Google,Bing,雅虎来抓取数据,由于服务器不是特别的好,并且考虑到会有很多的脏数据,我们在实现的时候并没有将数据入库,想要将数据进行持久化的保存,可以使用导出的方式将数据以电子表格的方式导出来! 难点一: 项目经历了一次大的改版,将整个的抓取流程做了一次很大的改动.我们在抓取

Vue 路由设置router

由于学习的是router1.0的设置方法,但是现在都是支持2.0的,都报错,那些方法没定义,所以只好又来研究一下router2.0. vue-router2.0对路由的设置有了很大的改变,在HTML中将之前的用a标签link path改成了直接用一个router-link标签,但是你在网页审查元素会发现它还是一个a标签,router-view没有改变,在js中也将原本的router.map 直接改成了一个数组然后在new VueRouter时直接将数组用进去,将之前的挂载由router.star

精华 对express中next函数的一些理解

关于next主要从三点来进行说明: next的作用是什么? 我们应该在何时使用next? next的内部实现机制是什么? Next的作用 我们在定义express中间件函数的时候都会将第三个参数定义为next,这个next就是我们今天的主角,next函数主要负责将控制权交给下一个中间件,如果当前中间件没有终结请求,并且next没有被调用,那么请求将被挂起,后边定义的中间件将得不到被执行的机会. 何时使用Next 从上边的描述我们已经知道,next函数主要是用来确保所有注册的中间件被一个接一个的执