如何解决catch {} // eslint-disable-line问题?



我已经创建了应该连接到mongodb的文件(index.js),文件代码如下

但是当我试图通过输入node index.js来运行文件时它会给我错误

C:UsersMOHAS076SBC-trp-web-test-automationnode_modulesmongodblibbson.js:10
catch { } // eslint-disable-line
^
SyntaxError: Unexpected token {

代码——

// Module calling
MongoClient = require ('mongodb');
// Server path
const url = 'mongodb://10.142.206.22:27017/';
// Name of the database
const dbname = 'snapp_transactions';
MongoClient.connect (url, (err, client)=>{
if (!err) {
log.info ('successful connection with the server');
}
else
{ log.info ('Error in the connectivity'); }
});

我试图解决的事情

  1. 重新安装我的node模块
  2. 删除mongodb后重新安装。3注释const bson_1 = require("./bson");它存在于utils.js中,但之后它给出错误'mongodb'未找到。

这在我的包下面。Json(其中我的"mongodb"; "^4.1.0"是由于兼容性问题,我的节点版本是8.12按项目要求)

{
"name": "sbcwdwdlr-web-test-automation",
"version": "1.0.0",
"private": true,
"description": "This package contains an example of implementing GQE's Node.js test framework for mobile using Cucumber and Mocha.",
"keywords": [
"gqe",
"mobile",
"node",
"webdriverio"
],
"license": "UNLICENSED",
"author": "James T. Wood",
"main": "wdio.cucumber.conf",
"scripts": {
"build": "npm run clean:dist && npm run lint && npm run build:ts && npm run format",
"build:ts": "tsc -p .tsconfig.json",
"clean:dist": "rm -R ./dist || true",
"format": "prettier --write "dist/**/*.{js,json}" || true",
"lint": "npm run lint:js && npm run lint:ts && npm run lint:gherkin",
"lint:js": "eslint . || true",
"lint:ts": "tslint -c .tslint.json -p .tsconfig.json || true",
"lint:gherkin": "gherkin-lint --rulesdir "src/utilities/build/gherkin-rules" || true",
"test": "npm run test:all",
"test:all": "cross-env TS_NODE_PROJECT=.tsconfig.json mocha -r ts-node/register test/**/*.spec.ts"
},
"dependencies": {
"@gqe/cli": "*",
"@gqe/framework-core": "^2.0.30",
"@gqe/framework-cucumber": "^2.0.43",
"@gqe/framework-entities": "^2.0.44",
"@gqe/framework-services": "^2.0.44",
"@gqe/framework-utilities": "^2.0.28",
"@gqe/framework-web": "^2.0.30",
"@gqe_mslt/common": "git+ssh://git@github.disney.com:MSLT/mslt-common.git#v1.4.3",
"@types/redis": "^2.8.25",
"deepmerge": "^2.2.1",
"dotenv": "^6.2.0",
"dotenv-json": "^1.0.0",
"inquirer": "^6.2.1",
"jimp": "^0.16.1",
"json-stringify-safe": "^5.0.1",
"lodash": "^4.17.20",
"loglevel": "^1.6.1",
"minimist": "^1.2.0",
"moment": "^2.23.0",
"mongodb": "^4.1.0",
"randomstring": "^1.1.5",
"redis": "^2.8.0",
"redis-cli": "^1.3.1",
"unique-names-generator": "^3.0.0",
"uuid": "^8.3.1",
"window": "^4.2.7",
"xml-js": "^1.6.11"
},
"devDependencies": {
"@types/chai": "^4.1.4",
"@types/deepmerge": "^2.1.0",
"@types/dotenv": "^4.0.3",
"@types/inquirer": "0.0.42",
"@types/lodash": "^4.14.119",
"@types/minimist": "^1.2.0",
"@types/mocha": "^5.2.4",
"@types/node": "^10.12.18",
"@types/prettier": "^1.15.2",
"chai": "^4.1.2",
"cross-env": "^7.0.2",
"eslint": "^5.10.0",
"gherkin-lint": "^2.13.2",
"mocha": "^5.2.0",
"node-fetch": "^2.6.1",
"node-key-sender": "^1.0.11",
"prettier": "1.13.7",
"reports": "^0.1.1",
"ts-node": "^7.0.0",
"tslint": "^5.12.0",
"tslint-eslint-rules": "^5.3.1",
"typescript": "^3.6.3",
"wdio-multiple-cucumber-html-reporter": "^1.1.1"
}
}

摘要:您将需要一个较新版本的nodejs来使用该版本的mongodb或使用v8.12版本的nodejs认证的旧版本mongodb。

/细节说明:

违规的Mongodb代码似乎是这样的:

try {
// Ensure you always wrap an optional require in the try block NODE-3199
BSON = require('bson-ext');
} catch {} // eslint-disable-line

使用catch而不出现catch(err)中的错误被称为"可选捕获绑定"。这本来不是一个Javascript特性,是在ES2019中添加的,最初在nodejs 10中支持。

这意味着你的nodejs版本8.12显然不支持Javascript结构。因此,换句话说,该版本的Mongodb与nodejs v8.x不兼容。

如果您查看mongodb的包的engines部分。Json,您将看到它指定:

"engines": {
"node": ">=12.9.0"
}

要使用该版本的mongodb,您将需要更新版本的nodejs至少v12.9。您可以使用与node 8兼容的旧版本mongodb。

这可能是不言而喻的,但这是指定旧版本nodejs的项目的危险之一。Nodejs v8.0.0最初发布于2017-05-30,它的v8.17.0的最后一个版本是2019-12-17,现在它已经达到了"生命终止"。根据nodejs项目描述

同时,v14是当前的长期支持版本。Nodejs项目页面解释说,你可以期待在"长期支持"中修复关键bug。从初次发布开始,可以发布30个月。节点v8和v10都已经过期(达到生命周期终止),不建议用于生产应用程序。v12的维护将持续到2022年5月(届时它的寿命将结束)。V14是活跃的LTS版本,活跃的LTS版本将在今年年底左右转移到v16。所以,版本8。X是"老"的;按照nodejs标准。这就是为什么主要模块(如mongodb)将其留在后面,这样他们就可以最大限度地减少他们必须测试的单独nodejs版本的数量,这样他们就可以在新版本的Javascript和nodejs中使用现代功能。

catch语法错误。

是这样写的

try {
}catch(err){} 

最新更新