希望这是一个简单的问题。我正在尝试使用 es6 import-from 样式导入 MongoDB。如果我使用 node require 导入它可以正常工作。
let mongo = require('mongodb');
let MongoClient = mongo.MongoClient;
但如果我以 es6 方式导入它,它会在没有错误或日志的情况下中断。
import {MongoClient} from 'mongodb';
但它不会在编译/运行时中断,它只会在我尝试使用 MongoClient 做任何事情时中断。
这是我的 Db Manager 类(class)-
import {MongoClient} from 'mongodb';
export class DbManager {
constructor() {
console.log('Constructing DB Connection');
}
}
当我运行我的服务器时,我会从其他管理器和事件中获得多个日志。
mycomputer myuser$ ./start.sh
Server Constructing
Route Manager Constructing
Initializing Route: Static
Constructing DB Connection
http server started on port: 8000
但是,如果我对 MongoClient 进行 console.log,则根本没有输出。
import {MongoClient} from 'mongodb';
export class DbManager {
constructor() {
console.log('Constructing DB Connection');
console.log(MongoClient);
}
}
输出看起来像这样-
mycomputer myuser$ ./start.sh
mycomputer myuser$
没有编译错误,所以我不明白为什么这不起作用。此外,我不明白为什么没有任何日志!这是最后发生的事情之一,我认为至少应该有日志记录。如果你想在这里看到我的 start.sh
脚本(又快又脏,不要评判我):
tsc
echo "var System = require('systemjs');" > dist/final.js
babel dist/typescript.js >> dist/final.js
echo "System.import('main');" >> dist/final.js
node dist/final.js
编辑
在等待(希望)响应的同时继续寻找答案。我正在查看生成的 final.js
,如果在文件中的任何位置使用 MongoClient,则 System.register
函数调用看起来像这样-
System.register("db/db.manager", ["mongodb"] ...
如果我不使用它(即使我导入它)它也不会显示 mongodb
。
System.register("db/db.manager", [] ...
这可以解释为什么什么都不会发生。尝试导入 mongodb
时出现问题。还不知道该怎么做。
编辑编辑
找到了解决办法。一个我不喜欢的,但也许这就是它必须的方式。
我认为我不能依赖 es6 导入。看起来我可以用它来导入 typedef,但不能导入实际的模块。我是如何解决这个问题的-
import {Db as MongoDb, MongoClient} from 'mongodb';
let mongodb = require('mongodb');
let mongoClient: MongoClient = mongodb.MongoClient;
很多额外的工作。如果有其他方法请告诉我。
最佳答案
听着,我知道这里的解决方案有不少漏洞。有些可能对你有用,但对我来说,除了下面的一个,没有一个能解决我。
2021 年更新:
无聊的背景故事提醒
我们使用的是 Node v14.16.0,我们的 package.json
设置了 "type": "module"
。所以,我们的代码是 ES6+ 并且 commonjs 导入在大多数情况下是一个交易破坏者,尤其是当涉及到 MongoDB Native 3.6 NodeJS Driver 时。 .
我们很幸运,MongoDB Native ^4.0.0-beta.3是用 TypeScript 编写的,可以按预期工作。为升空做好准备。 ;) 哦,与其在源代码中存储你的秘诀(user:pass 和 uri),不如查看 node-config
并确保安全。
解决方案
# This version will keep changing after this posts, so take heed.
$ cd path/to/your/project
$ npm i -s mongodb@4.0.0-beta.3
在您的项目中:
import config from 'config'
// MongoDB
import { MongoClient } from 'mongodb'
const client = new MongoClient(config.get('mongodb.uri'))
await client.connect()
const db = client.db()
const stuff = db.collection('AllTheStuff')
const record = {
type: "ThisAndThat",
lastUpdated: new Date().getTime()
}
const query = { type: "ThisAndThat" }
const options = { upsert: true }
const result = await stuff.replaceOne(query, record, options)
现在你所有的猫今晚都安静地睡着了。希望这可以降低世界上无可争议的精神错乱程度,或者帮助您完成任务,以符合您对成就的品味。 :)
关于javascript - 如何使用 es6 样式导入导入 MongoDB?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35962879/