日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

莫名的_locals属性

發布時間:2025/5/22 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 莫名的_locals属性 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

  • 莫名多出個_locals屬性
    • reqbody
    • data中的_locals
    • 問題還是沒有解決
    • 問題的原因

莫名多出個_locals屬性

req.body

今天使用express做一個圖書管理項目練習時,發現對req.body得到的數據,進行遍歷賦值的時候,莫名多出來一個_locals屬性,值是一個空對象。通過console.log將req.body打印出來卻又沒有這一項。

使用 hasOwnProperty 進行判斷,結果拋出異常 xxx.hasOwnProperty is not a function,打印其原型__proto__,得到的卻是undefined,一系列事情實在令人費解。

// 修改圖書信息exports.editBook = (req, res) => {let book = req.body;// console.log(book);// console.log(book.__proto__);for(let i = 0; i < data.length; i++){if(data[i].bookId == book.bookId){for(let k in book){// if(book.hasOwnProperty(k))// console.log(k,book[k])data[i][k] = book[k];}break;};}writeDataToFile(res);}

想盡各種方法,就是找不到_locals這個屬性在哪。

雖然想出了一個解決辦法,但是卻是避開了遍歷req.body數據,而用另一個期望數據來代替的方法。

// 修改圖書信息exports.editBook = (req, res) => {let book = req.body;for(let i = 0; i < data.length; i++){if(data[i].bookId == book.bookId){for(let k in data[i]){ // 遍歷data[i]而不是book中的鍵data[i][k] = book[k];}break;};}writeDataToFile(res);}

這樣確實是解決了會多出一個_locals屬性的問題,但是還是沒解決我的疑惑,這個_locals屬性到底是怎么來的?

網上找到了一個可以在chrome瀏覽器中調試node的方法,使用node-inspector來實現瀏覽器端調試node。
【技巧】斷點調試你的express項目
然后在調試過程中終于發現了,原來不是req.body中有_locals屬性,而是不知道什么原因,在data對應的那個數據中添加了_locals屬性。

由此又引起了我的疑惑:

  • 這個_locals是哪來的?
    還是之前沒解決的問題,只是從原來的目標req.body變成了data
  • 為什么會剛好只有對應修改的數據有_locals這個屬性?
    如果能了解到第一個問題的答案,也許這個問題也能解決吧。
  • 為什么改成遍歷data[i],結果數據中就不再有_locals這個屬性了呢?
    原本以為這個屬性是req.body加上的,自然是沒有這個疑問,但是既然這個屬性是在data[i]里面,那么用遍歷data[i]得到的鍵名k,通過book(req.body)給data[i]的屬性賦值,應該是不會清除掉data[i]._locals這一項的才對。
  • data中的_locals

    帶著疑惑,把代碼修改一下后再次調試查看一下。

    // 修改圖書信息exports.editBook = (req, res) => {let book = req.body;for(let i = 0; i < data.length; i++){if(data[i].bookId == book.bookId){for(let k in data[i]){ // 遍歷data[i]而不是book中的鍵data[i][k] = book[k];}break;};}writeDataToFile(res);}

    可以看到依然是剛進入方法對應要修改的data數據就有了_locals屬性。

    進入循環之后可以發現,遍歷data[i]的時候確實有一個_locals被遍歷出來了,只是因為book對象中沒有該屬性,所以data[i][‘_locals’]被重新賦值為undefined。

    但是至此data數據中還是應該存在著_locas這個屬性才對,

    事實上,也確實是,在執行完畢editBook方法之后,確實顯示_locals屬性還是存在的,為什么在最后的文件中卻沒有出現這一項,我只能猜測是之后在其他一些依賴或框架的某個方法將這個undefined的值給清除掉了。

    問題還是沒有解決

    最終問題還是沒有徹底解決,沒有完全搞明白,暫時先放一下吧,也不知道以后能不能弄清楚了。

    問題的原因

    data 數據原本是通過require(‘./data.json’)引入的,修改代碼成為文件讀取得到數據的形式,發現不會出現 _locals屬性了。

    let data = fs.readFileSync(path.join(__dirname, 'data.json'));data = JSON.parse(data);

    之前調試的時候,會直接在修改的數據中添加一項 _locals屬性,而現在修改了獲取數據的方式之后,很明顯的看到,莫名多出來的_locals屬性不見了。

    這里做一個猜測:require()是用來引入其他模塊的,一般都是一個js文件,提供一個接口對象或方法,而在data.json文件中并沒有這樣的接口,是直接的json數據,所以不應該使用require()來引入。

    轉載于:https://www.cnblogs.com/wayowe/p/7779560.html

    總結

    以上是生活随笔為你收集整理的莫名的_locals属性的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。