Node,Express和Mongoose:身份验证失败错误

问题描述 投票:0回答:1

我是Node / Express / Mongo / MLab和后端编程的新手。我正在尝试向MLab数据库提交帖子请求并遇到麻烦。我认为我的问题在于Mongoose和MLab。

Here is my Glitch project

我收到错误MongoDB connection error: { MongoError: Authentication failed.为什么我收到此错误?我的mongoose.connect功能和凭证有问题吗? MLab没有正确设置吗?

'use strict';

var express = require('express');
var mongo = require('mongodb');
var mongoose = require('mongoose');
var bodyParser = require('body-parser');
var validUrl = require('valid-url');
var dns = require("dns");
var cors = require('cors');
var app = express();

// Basic Configuration 
var port = process.env.PORT || 3000;


// Hooks up app to MLab MongoDB database by using the .env variable I created
// Doesn't work. Data is not submitted to MLab and /api/shorturl/new endpoint freezes up when form is submitted
mongoose.connect(process.env.MONGODB_URI, {useMongoClient: true});

/*
Also doesn't work
mongoose.connect(process.env.MONGODB_URI, {
    "auth":{"authSource": "admin"},
    "user": "admin",
    "pass": "password"
});
*/

// Should allow us to use promises with mongoose
mongoose.Promise = global.Promise;


var db = mongoose.connection;
db.on('error', console.error.bind(console, 'MongoDB connection error:'));


// Sets up a Schema for the DB
var urlSchema = new mongoose.Schema({
  url: String,
  shortenedUrl: String
});


// Sets up a model for the DB
var Url = mongoose.model("Url", urlSchema);


app.use(cors());

/** this project needs to parse POST bodies **/
// you should mount the body-parser here
var urlencodedParser = bodyParser.urlencoded({ extended: false });
app.use(bodyParser.json()); // support json encoded bodies
app.use(bodyParser.urlencoded({ extended: true })); // support encoded bodies

app.use('/public', express.static(process.cwd() + '/public'));

// parse application/x-www-form-urlencoded


app.get('/', function(req, res){
  res.sendFile(process.cwd() + '/views/index.html');
});


app.get("/api/shorturl/new", function (req, res) {
  res.sendFile(process.cwd() + '/views/form.html');
  //res.send({hi: "hi"});
});


app.post("/api/shorturl/new", urlencodedParser, function (req,res) {
  // Gets URL from form
  //var url = req.body.url;
  //console.log(url);

  var myData = new Url(req.body);

  console.log("myData : " + myData);

  myData.save()
    .then(item => {
      res.send("Successfully saved to DB");
    })
    .catch(err => {
      res.status(400).send("Unable to save to DB");
    });

});

app.listen(port, function () {
  console.log('Node.js listening ...');
});
node.js express post mongoose mlab
1个回答
0
投票

正如其他人评论代码本身看起来它应该工作。

因此,直接的嫌疑人是URI,显然你不会发布我们所有人都看到的完整字符串,但是想到的一个理论是你的密码需要编码的字符,尝试在密码上使用javascripts encodeURIComponent

© www.soinside.com 2019 - 2024. All rights reserved.