Memo 关于mongodb fetch pug 插值小结

本文总结了关于MongoDB的_id合法性,Mongoose集合命名规则,使用Express的app.param进行参数验证,fetch POST请求的Content-Type设置,以及Pug模板中对象变量的插值方法。通过这些知识点,帮助开发者更好地理解和实践MongoDB、fetch与Pug在实际项目中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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: &lt;span&gt;escape!&lt;/span&gt;</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 = {&quot;foo&quot;:&quot;bar&quot;}</script>

Pug中嵌入JAVAScript脚本的三种形式:

  • 用 - 开始一段不直接进行输出的代码(inline or block 都OK)
  • 用 = 开始一段不直接进行输出的代码(为安全起见内容会优先HTML转义)
  • 用 != 开始一段不转义的,带有输出的代码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值