I have got a serverless db on atlas ( https://www.mongodb.com/serverless ). I used the connection string recommended by ATLAS:
mongodb+srv://<username>:<password>@xyz.esxbh.mongodb.net/myFirstDatabase?retryWrites=true&w=majority
however as soon as i try to create a record, i get the following error:
{"errorType":"Runtime.UnhandledPromiseRejection","errorMessage":"MongoParseError: Text record must only set `authSource` or `replicaSet`","reason":{"errorType":"MongoParseError","errorMessage":"Text record must only set `authSource` or `replicaSet`","name":"MongoParseError","stack":["MongoParseError: Text record must only set `authSource` or `replicaSet`","
I don't think that the connection string is correct, on the other hand the dns entry for the server does reply with 2 servers.
I tried dropping the '+srv' part, however in that case the save function from mongoose just hangs forever timing out the lambda function.
I could not find any similar problem on google.
The TXT entry record from the dns server shows:
"TXT "authSource=admin&loadBalanced=true"
How have you configured the serverless database to work?
The code that generates the error depends on mongoose and is as follows:
try {
const customer = new Customer(cust);
console.log('new cusotmer created');
const returnedCustomer = await customer.save();
console.log(returnedCustomer);
return serverResponse(200, returnedCustomer);
} catch(err){
console.log(err);
return errorHandler(500, err)
}
It seems that the connection to the database is fine:
try {
await dbTools.connectMongoose();
console.log('*** connected ***');
} catch(err){
console.log('error when connecting');
return errorHandler(500, err);
}
Now, looking at the source code, nothing really too complicated:
if (Object.keys(record).some(key => key !== 'authSource' && key !== 'replicaSet')) {
return callback(
new MongoParseError('Text record must only set `authSource` or `replicaSet`')
);
}
I am now really struggling to understand what's wrong as authSource seems to be present in the TXT record.
Upgrading mongoose to the latest version worked for me in Nodejs .
Worked on 10-Sep-2021
For anyone still experiencing this in 2022, here is an answer from a MongoDB employee (at the bottom). It's a native Node.js driver issue (nothing to do with AWS lambda specifically), which will waterfall to all ODM implementations that implement the native driver.
https://www.mongodb.com/community/forums/t/atlas-serverless-and-dns-txt-record/117967/8
According to Zia Ullah's answer to this same question, this is fixed by Mongoose 6.0.5.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.