【问题标题】:eslint issue for properties with underscore as prefix下划线作为前缀的属性的 eslint 问题
【发布时间】:2020-03-10 15:00:19
【问题描述】:

我是 NodeJS 和 MongoDB 的初学者,在学习一些在线资源时,我创建了 mongoose 模式:

const mongoose = require('mongoose')

const blogSchema = mongoose.Schema({
  title: String,
  author: String,
  url: String,
  likes: Number,
})

blogSchema.set('toJSON', {
  transform: (document, returnedObject) => {
    returnedObject.id = returnedObject._id.toString()
    delete returnedObject._id
    delete returnedObject.__v
  }
})

但是 eslint 总是给我错误:

  1. 对于returnedObject.iddelete returnedObject._iddelete returnedObject.__v - 赋值给函数参数'returnedObject'.eslint(no-param-reassign)的属性
  2. 对于returnedObject._idreturnedObject.__v - '_id'.eslint(no-underscore-dangle) 中意外悬空'_'

删除_id__v 字段并将_id 重新分配给id 以获得returnedObject 的正确方法是什么?

我正在使用基于 airbnb 的 eslint 配置(devDependencies from package.json):

    "eslint": "^6.8.0",
    "eslint-config-airbnb-base": "^14.0.0",
    "eslint-plugin-import": "^2.20.1",

【问题讨论】:

  • 这很好,我认为你的 eslint 配置太严格了。 TBH 在我看来,它没有区分对象及其属性,这很奇怪。 (AFAIK no-param-reassign 应该只阻止您重新分配 returnedObject 本身,并且以同样的方式 no-underscore-dangle 应该只抱怨名为 _id 的变量,而不是属性......)
  • 您的代码没有问题。但是,如果您必须使用此 lint 规则,那么要使其停止抱怨,您可以使用临时变量:let tmp = returnedObject; tmp.id = tmp._id.toString() 等。
  • @CherryDT 似乎严格检查来自airbnb eslint配置。我想知道为什么它不区分对象及其属性。
  • @slebetman 分配给一个 tmp 对象,no-param-reassign 问题消失了,但它仍然抱怨no-underscore-dangle
  • 我认为您无法摆脱它,因为该属性称为_id,您无能为力。尝试通过在末尾添加 // eslint-disable-line no-underscore-dangle 来禁用必要行上的规则。

标签: node.js mongoose eslint


【解决方案1】:

正如上面 cmets 中 @CherryDT 和 @slebetman 所建议的那样 - 代码没有任何问题,问题仅与 eslint 配置有关

我想出了以下解决方案:

禁用线路

在您看到此错误的行上方添加注释:

// eslint-disable-next-line no-param-reassign, no-underscore-dangle
returnedObject.id = returnedObject._id.toString()

或在该行旁边:

returnedObject.id = returnedObject._id.toString() // eslint-disable-line no-param-reassign, no-underscore-dangle

对文件禁用

在文件的第一行添加注释:

/* eslint-disable no-param-reassign, no-underscore-dangle */

关闭 eslint 配置中的规则(通常是.eslintrc.js.eslintrc.yml 或类似名称.eslintrc.*

rules: {
  no-underscore-dangle: off,
  no-param-reassign: off,
}

上面的例子如果是yml配置,其他配置也可以做类似的事情。

前两个解决方案不适合庞大的代码库,因此我建议使用第三个选项。

*可以在同一条评论中关闭多个错误,用逗号隔开。

【讨论】:

    猜你喜欢
    • 2017-03-17
    • 2011-07-31
    • 1970-01-01
    • 2011-09-03
    • 2017-07-26
    • 2011-12-20
    • 2022-11-13
    • 2011-08-24
    相关资源
    最近更新 更多