我有一个使用CosmosDB和MongoDB API部署到azure的node.js应用程序.我的应用程序使用mongoose,它在4.13.9中无缝运行.
我的应用程序连接如下:
var configDB = require('./config/database');
var mongoose = require('mongoose');
mongoose.connect(configDB.url, { useMongoClient: true } );
mongoose.Promise = global.Promise;
var db = mongoose.connection;
db.on('error', console.error.bind(console, 'MongoDB connection error:'));
Run Code Online (Sandbox Code Playgroud)
config/database文件定义如下(更改用户名,密码,DB保护无辜):
module.exports = {
'url': 'mongodb://azureusername:azurepassword@myazuredb.documents.azure.com:10255/?ssl=true'
}
Run Code Online (Sandbox Code Playgroud)
现在问题出现在我安装mongoose 5.0.1时.我从连接中删除了useMongoClient选项并删除了promise,所以我的连接代码现在是:
mongoose.connect(configDB.url);
var db = mongoose.connection;
db.on('error', console.error.bind(console, 'MongoDB connection error:'));
Run Code Online (Sandbox Code Playgroud)
当这个运行时,我在控制台中得到以下内容:
(node:21392)UnhandledPromiseRejectionWarning:未处理的promise promise(拒绝ID:2):错误:密码包含非法的非转义字符
我甚至可以将连接代码注释到只有mongoose.connect的地方,这就是给出错误的原因.我究竟做错了什么?我需要考虑5.0.1中的重大变化吗?作为一个可能相关或不相关的附注,我看到一些关于现在给出回调而不是使用promises的注释,所以如果有人在Node/Express应用程序中有一个如何做到这一点的例子,那将是很好的,但它没有当我在连接上报告关于非法字符的错误时,我觉得这就是isee.注意:运行4.13.9或5.0.1时配置文件完全相同所以我知道密码有效,这不是问题.