问题
When I run this (using node v7.5.0 with --harmony):
var MongoClient = require('mongodb').MongoClient,
var url = "mongodb://localhost:27017/myDB";
var test = await MongoClient.connect(url);
module.exports = test;
I get this error:
var test = await MongoClient.connect(url);
^^^^^^^^^^^
SyntaxError: Unexpected identifier
MongoClient.connect(url) does return a promise
What I ultimately want to achieve is to create a node module that will connect to a mondoDB and will be usable as in the following example:
var db = require('../utils/db'); //<-- this is what I want to create above
col = db.collection('myCollection');
module.exports.create = async fuction(data) {
return await col.insertOne(data);
}
Any suggestions?
回答1:
Is your module wrapper an async function as well? You need the await
keyword to be in an async function.
回答2:
What about wrapping it in an async function?
var MongoClient = require('mongodb').MongoClient,
var url = "mongodb://localhost:27017/myDB";
var test = async function () {
return await MongoClient.connect(url);
}
module.exports = test;
回答3:
I solved it like this, only opening one connection:
db.js
const MongoClient = require('mongodb').MongoClient;
let db;
const loadDB = async () => {
if (db) {
return db;
}
try {
const client = await MongoClient.connect('mongodb://localhost:27017/dbname');
db = client.db('dbname');
} catch (err) {
Raven.captureException(err);
}
return db;
};
module.exports = loadDB;
index.js
const loadDB = require('./db');
const db = await loadDB();
await db.collection('some_collection').insertOne(...);
来源:https://stackoverflow.com/questions/42215592/how-can-i-use-async-await-with-mongoclient