我有一个使用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时配置文件完全相同所以我知道密码有效,这不是问题.
我目前使用 request 在 node.js 中发出 http 请求。我在某个时候遇到了一个问题,我收到指示 UNABLE_TO_GET_ISSUER_CERT_LOCALLY 的错误。为了解决这个问题,它设置了rejectUnauthorized。我的请求工作代码如下所示:
var url = 'someurl';
var options = {
url: url,
port: 443,
// proxy: process.env.HTTPS_PROXY, -- no need to do this as request honors env vars
headers: {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv:11.0) like Gecko',
'Accept-Language': 'en-us',
'Content-Language': 'en-us'
},
timeout: 0,
encoding: null,
rejectUnauthorized: false // added this to prevent the UNABLE_TO_GET_ISSUER_CERT_LOCALLY error
};
request(options, function (err, resp, body) {
if (err) reject(err);
else resolve(body.toString());
});
Run Code Online (Sandbox Code Playgroud)
我想我会尝试使用 async/await …