剛剛寫代碼的時候情组,想通過request.params這個方法來取url中的參數(shù)爬凑,根據(jù)官方API金刁,假設(shè)路由為/path/:id辜王,url為/path/1,那么request.params.id=1.于是開心的用了惫企,但是沒有取到結(jié)果
var express = require('express');
var router = express.Router();
var User = require('../data/user');
/* Get detail page*/
router.get('/',function(req,res){
var id = req.params.id.;
User.find({blog_id:id},function(err,detail){
var title = detail.title;
var article = detail.article;
var date = detail.date;
res.render('detail',{title:title,article:article,date: date});
});
});
module.exports= router;
代碼如上撕瞧,經(jīng)過一番檢查陵叽,發(fā)現(xiàn)req.params方法取得的值是字符串!坑死人啊
req.params
This property is an object containing properties mapped to the named route “parameters”. For example, if you have the route /user/:name, then the “name” property is available as req.params.name. This object defaults to {}.
// GET /user/tj
req.params.name
// => "tj"
也怪自己太粗心丛版,寫在這里巩掺,自己記住,也希望幫到其他被坑的小伙伴
PS:解決辦法
- 轉(zhuǎn)換函數(shù):
js提供了parseInt()和parseFloat()兩個轉(zhuǎn)換函數(shù)页畦。前者把值轉(zhuǎn)換成整數(shù)胖替,后者把值轉(zhuǎn)換成浮點數(shù)。只有對String類型調(diào)用這些方法豫缨,這兩個函數(shù)才能正確運行独令;對其他類型返回的都是NaN(Not a Number)。
一些示例如下:
復制代碼 代碼如下:
parseInt("1234blue"); //returns 1234
parseInt("0xA"); //returns 10
parseInt("22.5"); //returns 22
parseInt("blue"); //returns NaN
parseInt()方法還有基模式好芭,可以把二進制燃箭、八進制、十六進制或其他任何進制的字符串轉(zhuǎn)換成整數(shù)舍败≌欣辏基是由parseInt()方法的第二個參數(shù)指定的,示例如下:
復制代碼 代碼如下:
parseInt("AF", 16); //returns 175
parseInt("10", 2); //returns 2
parseInt("10", 8); //returns 8
parseInt("10", 10); //returns 10
如果十進制數(shù)包含前導0瓤湘,那么最好采用基數(shù)10瓢颅,這樣才不會意外地得到八進制的值。例如:
復制代碼 代碼如下:
parseInt("010"); //returns 8
parseInt("010", 8); //returns 8
parseInt("010", 10); //returns 10
parseFloat()方法與parseInt()方法的處理方式相似弛说。
使用parseFloat()方法的另一不同之處在于挽懦,字符串必須以十進制形式表示浮點數(shù),parseFloat()沒有基模式木人。
下面是使用parseFloat()方法的示例:
復制代碼 代碼如下:
parseFloat("1234blue"); //returns 1234.0
parseFloat("0xA"); //returns NaN
parseFloat("22.5"); //returns 22.5
parseFloat("22.34.5"); //returns 22.34
parseFloat("0908"); //returns 908
parseFloat("blue"); //returns NaN
- 強制類型轉(zhuǎn)換
還可使用強制類型轉(zhuǎn)換(type casting)處理轉(zhuǎn)換值的類型信柿。使用強制類型轉(zhuǎn)換可以訪問特定的值,即使它是另一種類型的醒第。
ECMAScript中可用的3種強制類型轉(zhuǎn)換如下:
Boolean(value)——把給定的值轉(zhuǎn)換成Boolean型渔嚷;
Number(value)——把給定的值轉(zhuǎn)換成數(shù)字(可以是整數(shù)或浮點數(shù));
String(value)——把給定的值轉(zhuǎn)換成字符串稠曼。
用這三個函數(shù)之一轉(zhuǎn)換值形病,將創(chuàng)建一個新值,存放由原始值直接轉(zhuǎn)換成的值霞幅。這會造成意想不到的后果漠吻。
當要轉(zhuǎn)換的值是至少有一個字符的字符串、非0數(shù)字或?qū)ο螅ㄏ乱还?jié)將討論這一點)時司恳,Boolean()函數(shù)將返回true途乃。如果該值是空字符串、數(shù)字0扔傅、undefined或null耍共,它將返回false烫饼。
可以用下面的代碼段測試Boolean型的強制類型轉(zhuǎn)換。
復制代碼 代碼如下:
Boolean(""); //false – empty string
Boolean("hi"); //true – non-empty string
Boolean(100); //true – non-zero number
Boolean(null); //false - null
Boolean(0); //false - zero
Boolean(new Object()); //true – object
Number()的強制類型轉(zhuǎn)換與parseInt()和parseFloat()方法的處理方式相似试读,只是它轉(zhuǎn)換的是整個值杠纵,而不是部分值。示例如下:
復制代碼 代碼如下:
用 法 結(jié) 果
Number(false) 0
Number(true) 1
Number(undefined) NaN
Number(null) 0
Number( "5.5 ") 5.5
Number( "56 ") 56
Number( "5.6.7 ") NaN
Number(new Object()) NaN
Number(100) 100
最后一種強制類型轉(zhuǎn)換方法String()是最簡單的钩骇,示例如下:
復制代碼 代碼如下:
var s1 = String(null); //"null"
var oNull = null;
var s2 = oNull.toString(); //won't work, causes an error
- 利用js變量弱類型轉(zhuǎn)換
舉個小例子淡诗,一看,就會明白了伊履。
復制代碼 代碼如下:
<script>
var str= '012.345 ';
var x = str-0;
x = x*1;
</script>
上例利用了js的弱類型的特點,只進行了算術(shù)運算款违,實現(xiàn)了字符串到數(shù)字的類型轉(zhuǎn)換唐瀑,不過這個方法還是不推薦的