【发布时间】: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 总是给我错误:
- 对于
returnedObject.id、delete returnedObject._id和delete returnedObject.__v- 赋值给函数参数'returnedObject'.eslint(no-param-reassign)的属性 - 对于
returnedObject._id和returnedObject.__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来禁用必要行上的规则。