Mongo db Atlas 3.6.5身份验证失败

时间:2018-06-20 09:12:25

标签: node.js mongodb mongoose

我对node.js还是很陌生,我试图使用mongoose将数据写入免费的在线mongo db地图集,但是尽管编辑mongo db设置可以从任何地方连接并使用正确的用户名和密码,但我仍然无法通过身份验证数据库用户。

这是我连接到mongo db的app.js文件 app.js:

const express = require('express');
const morgan = require('morgan');
const bodyParser= require('body-parser');
const mongoose = require('mongoose');
const app = express();
const productRoutes= require('./api/routes/products');
const ordersRoutes= require('./api/routes/orders');
mongoose.connect('mongodb+srv://hilary:'+process.env.MONGO_ATLAS_PW+'@node-rest-dnqwa.mongodb.net/test?retryWrites=true').catch(err => console.log(err));

app.use(morgan('dev'));
app.use(bodyParser.urlencoded({extended:false}));
app.use(bodyParser.json());

app.use((req,res,next) =>{
res.header("Access-Control-Allow-Origin","*");
res.header('Access-Control-Allow-Headers','Origin,X-Requested-With,Content-Type,Accept,Authorization');

if(req.method === 'OPTIONS'){
    res.header('Access-Control-Allow-Methods','PUT,POST,GET,DELETE,PATCH');
    return res.status(200).json({});

}
    next();
});

app.use('/products',productRoutes);
app.use('/orders',ordersRoutes);

app.use((req,res,next) => {
    const error= new Error('not found');
    error.status = 404;
    next(error);

});

app.use((error,req,res,next) =>{
   res.status(error.status || 500);
   res.json({
        error: {
            message: error.message 

        }
   })


})


module.exports = app;

我在终端中收到此错误:

{ MongoError: authentication fail
    at C:\Users\Hiary\Documents\rest-api\node_modules\mongodb-core\lib\topologies\replset.js:1430:15
    at C:\Users\Hiary\Documents\rest-api\node_modules\mongodb-core\lib\connection\pool.js:877:7
    at C:\Users\Hiary\Documents\rest-api\node_modules\mongodb-core\lib\connection\pool.js:853:20
    at finish (C:\Users\Hiary\Documents\rest-api\node_modules\mongodb-core\lib\auth\scram.js:174:16)
    at handleEnd (C:\Users\Hiary\Documents\rest-api\node_modules\mongodb-core\lib\auth\scram.js:184:7)
    at C:\Users\Hiary\Documents\rest-api\node_modules\mongodb-core\lib\auth\scram.js:289:15
    at C:\Users\Hiary\Documents\rest-api\node_modules\mongodb-core\lib\connection\pool.js:544:18
    at process._tickCallback (internal/process/next_tick.js:112:11)
  name: 'MongoError',
  message: 'authentication fail',
  errors:
   [ { name: 'node-rest-shard-00-00-dnqwa.mongodb.net:27017',
       err: [MongoError] },
     { name: 'node-rest-shard-00-02-dnqwa.mongodb.net:27017',
       err: [MongoError] } ] }

我确定使用正确的名称和密码,为什么它不能对我进行身份验证,服务器在我的本地主机上运行

编辑 所以我点击了链接到文档,现在以这种方式连接:

mongoose.connect('mongodb://hilary:'+process.env.MONGO_ATLAS_PW+'@localhost:27017/test').catch(err => console.log(err));

然后我在终端中收到此错误:

{ MongoNetworkError: failed to connect to server [localhost:27017] on first connect [MongoNetworkError: connect ECONNREFUSED 127.0.0.1:27017]
    at Pool.<anonymous> (C:\Users\Hiary\Documents\rest-api\node_modules\mongodb-core\lib\topologies\server.js:505:11)
    at Pool.emit (events.js:180:13)
    at Connection.<anonymous> (C:\Users\Hiary\Documents\rest-api\node_modules\mongodb-core\lib\connection\pool.js:329:12)
    at Object.onceWrapper (events.js:272:13)
    at Connection.emit (events.js:180:13)
    at Socket.<anonymous> (C:\Users\Hiary\Documents\rest-api\node_modules\mongodb-core\lib\connection\connection.js:245:50)
    at Object.onceWrapper (events.js:272:13)
    at Socket.emit (events.js:180:13)
    at emitErrorNT (internal/streams/destroy.js:64:8)
    at process._tickCallback (internal/process/next_tick.js:114:19)
  name: 'MongoNetworkError',
  message: 'failed to connect to server [localhost:27017] on first connect [MongoNetworkError: connect ECONNREFUSED 127.0.0.1:27017]' }

1 个答案:

答案 0 :(得分:0)

有效的方法与mongoose文档略有不同,这是在Atlas服务器上建议的,对于使用常规mongo db驱动程序连接Mongodb 3.4+的每个人,即使在使用mongoose时,我的连接字符串也如下所示:

mongoose.connect('mongodb+srv://hilary:<password>@node-rest-dnqwa.mongodb.net').catch(err => console.log(err));