Answer a question

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.

Answers

Upgrading mongoose to the latest version worked for me in Nodejs.

  1. Remove "mongoose" from package.json.
  2. Reinstall "npm i mongoose"
  3. "mongoose version 6.0.5" should work.

Worked on 10-Sep-2021

Logo

MongoDB社区为您提供最前沿的新闻资讯和知识内容

更多推荐