1.MongoDB中_id必须是合法的ObjectID
特别是自己写ID的时候,注意通过`ObjectId.isValid`检查是否ID是否合法
var ObjectId = mongoose.Types.ObjectId;
ObjectId.isValid('abcdefng1223') //true
ObjectId.isValid('111') //false
避免查找更新出现找不到数据的情况
2.Mongoose集合命名传统
创建模型
var MyModel = mongoose.model('ModelName', mySchema);
如果是自己通过RoboMongo建立集合,要注意集合是模型的复数形式,如下:
var MyModel = mongoose.model('Ticket', mySchema);
上述代码自动创建一个Tickets的collection 而不是Tickit;链接github
3.用app.param([name], callback)进行参数的确认检查
如后台对id进行数据库检查是否存在,注意如果不需要检查的post/put不要用相同的参数,app.param([name], callback)使用详见官方文档 Express 4
4.fetch 的post接收类型设置
fetch 部分代码
fetch("http://localhost:3000/blobs/test",{
method:'POST',
headers:{
'Content-Type': 'application/json',
'Accept':'application/json'
},
body:JSON.stringify({
d:d,
belong:belong
})
})
.then((response)=>response.json())
.then((responseJsonData)=>{
console.log("请求成功");
console.log(responseJsonData);
})
.catch((error)=>{
alert(error);
})
ChromeDevTool 中的Headers示例:
POST /blobs/test HTTP/1.1
Host: localhost:3000
Connection: keep-alive
Content-Length: 49
Accept: application/json
Origin: http://localhost:3000
User-Agent: Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Mobile Safari/537.36
Content-Type: application/json
DNT: 1
Referer: http://localhost:3000/blobs/test
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.6,en;q=0.4
通过Accept: application/json 配合服务端(express)代码决定接收类型
服务端:
res.format({
html: function(){
res.redirect("/blobs/success");
},
//JSON responds
json: function(){
res.json(blob);
}
//other response
});
5.Pug中脚本获取服务端返回的对象变量
Pug中文文档(https://pugjs.org/language/interpolation.html)
1.字符串类型的转义插值
用#{String}的形式引用,String 内容会被评估并转义,
如文档中:
输入 |
---|
- var title = "On Dogs: Man's Best Friend";
- var author = "enlore";
- var theGreat = "<span>escape!</span>";
h1= title
p Written with love by #{author}
p This will be safe: #{theGreat}
输出如下 |
---|
<h1>On Dogs: Man's Best Friend</h1>
<p>Written with love by enlore</p>
<p>This will be safe: <span>escape!</span></p>
2.不转义插值
用!{String}的形式引用,String 内容不会被转义,String可以是任意有效的JavaScript代码
例如:
输入 |
---|
- var riskyBusiness = "<em>Some of the girls are wearing my mother's clothing.</em>";
.quote
p Joel: !{riskyBusiness}
输出如下 |
---|
<div class="quote">
<p>Joel: <em>Some of the girls are wearing my mother's clothing.</em></p>
</div>
注意:#{ }的形式不适合Object对象的插值,因为Object 中的内容被转义了Stackoverflow,如下:
var data = {"foo":"bar"}
var data = #{JSON.stringify(data)}
//==><script>var data = {"foo":"bar"}</script>
Pug中嵌入JAVAScript脚本的三种形式:
- 用 - 开始一段不直接进行输出的代码(inline or block 都OK)
- 用 = 开始一段不直接进行输出的代码(为安全起见内容会优先HTML转义)
- 用 != 开始一段不转义的,带有输出的代码