• 莫名多出个_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属性。

由此又引起了我的疑惑:

  1. 这个_locals是哪来的?
    还是之前没解决的问题,只是从原来的目标req.body变成了data
  2. 为什么会刚好只有对应修改的数据有_locals这个属性?
    如果能了解到第一个问题的答案,也许这个问题也能解决吧。
  3. 为什么改成遍历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属性相关推荐

  1. Android知识点剖析系列:深入了解layout_weight属性

    摘录自:http://www.cnblogs.com/net168/p/4227144.html 前言 Android中layout_weight这个属性对于经常捣鼓UI的我们来说,肯定不会陌生.但是 ...

  2. 博客属性10个非常不错的CSS技巧

    这几周个人几篇文章介绍了改博客属性的文章. 关联文章的地址 在这里,妙巧的运用CSS的技能,可以让你不必修改HTML能就失掉很好的博客或者模板表面.我收集了一些非常用有的CSS技能让我们计设博客时更炫 ...

  3. android startanimation 回调,ScheduledThreadPoolExecutor执行莫名停止问题Android几个动画回调运行线程...

    本文记录两个问题: ScheduleThreadPoolExecutor莫名停止执行.Animation和Animator两个动画回调监听 运行在哪个线程. 一:ScheduleThreadPoolE ...

  4. Session莫名丢失的原因及解决办法[转载]

    Asp.net 默认配置下,Session莫名丢失的原因及解决办法 正常操作情况下Session会无故丢失.因为程序是在不停的被操作,排除Session超时的可能.另外,Session超时时间被设定成 ...

  5. 关于使用runtimeStyle属性问题讨论

    当我们在IE中使用IE提供的DOM时,我们会发现关于style的相关属性有三个分组,它们分别是style.runtimeStyle和currentStyle.关于这个三种style的作用和基本用途,我 ...

  6. 演示和解析Flex布局中的各种属性

    文章目录 文章导读 一.justify-content center flex-start flex-end space-around space-evenly space-between 二.ali ...

  7. 关于dell戴尔笔记本磁盘空间莫名被占及删除System Volume Information

    小白第一帖. 存在好久的问题,磁盘空间莫名被占,且可用空间一天天变小,直至全部占满. win10系统,64位,b系统强迫我最多推迟30天更新,,,所以应该是新的 看了知乎,下载了wiztree,锁定嫌 ...

  8. 关于华为P10(Android 8.0系统)出现的一个莫名奇妙的ANR

    关于华为P10(Android 8.0系统)出现的一个莫名奇妙的ANR 首先贴出控制台报出的错误代码: java.util.concurrent.TimeoutException: android.v ...

  9. android 扫码枪 字符数少掉,BarTender条码字符数莫名变少是怎么回事?

    小伙伴们在使用BarTender 制作条码标签时,偶尔可能会发现制作的条码字符数变少了,为什么会这样呢?要怎么解决?本文小编就来教大家鉴定BarTender条码字符数变少的原因,并帮助小伙伴们解决问题 ...

最新文章

  1. xml操作类(转载)
  2. Linux内核分析 - 网络[四]:路由表
  3. source insight使用
  4. 【MM模块】Sub Range 供应商子范围
  5. 转:更改pip源至国内镜像,显著提升下载速度
  6. 学习的过程和挖矿其实很像
  7. rabbitmq的安装和使用
  8. leetcode 628. Maximum Product of Three Numbers | 628. 三个数的最大乘积(Java)
  9. 可爱的 Python: 使用 mechanize 和 Beautiful Soup 轻松收集 Web 数据
  10. c 正则提取html,c – 正则表达式以获取HTML表格内容
  11. FATE HDU - 2159(二维完全背包)
  12. php 空格用什么表示方法,php用空格代替标点符号
  13. TypeError: ufunc ‘multiply‘ did not contain a loop with signature matching types dtype(‘S32‘) dtype(
  14. C语言 动态开辟内存管理
  15. ad15的stc元件库_altium designer常用元件库和封装库下载-非常全面初学者有福了
  16. Diamond3.5软件的使用--(2)新建工程并生成可烧录文件
  17. win10多合一原版系统_【教程】制作Windows 10 多合一原版系统
  18. 【Java SE】数组
  19. WLAN驱动分析文档
  20. lnsist不是insist

热门文章

  1. 由浅入深:自己动手开发模板引擎——解释型模板引擎
  2. js 默认的参数、可变的参数、变量作用域
  3. 二分图的最大匹配—匈牙利算法
  4. leetcode Longest Palindromic Substring
  5. golang匿名组合
  6. 网络编程中的缓冲区溢出
  7. STM32常用数据类型 u8、u16、u32
  8. 操作系统-南京大学(蒋岩炎)课程--操作系统上的程序
  9. 汇编(8086cpu): ip寄存器与指令的关系
  10. [译]Effective Kotlin系列之探索高阶函数中inline修饰符(三)