我应该如何连接本地猫鼬数据库并将其移动到 mongodb 云图集?
How should I connect and move my local mongoose db to mongodb cloud atlas?
当我启动服务器时,显示如下错误:
Error in DB connection : Error: queryTxt ETIMEOUT yky-api-ajgvf.mongodb.net
为了解决这个问题,我尝试了很多次都无法正常工作。我什至无法在 heroku 上正确部署我的项目。非常喜欢nodejs,现在只想暂时放弃继续学习Nodejs
如果可能的话,有人帮我解决我的问题。我是正在学习的Node.Js。已经有四五个月了。之前决定学leranPHP,现在还在努力学习nodejs
我是新手。 :)
这是我的小项目中的配置数据库代码。
const mongoose = require('mongoose')
const log = console.log
mongoose.connect('mongodb+srv://chanlay:chanlay123@yky-api-ajgvf.mongodb.net/yky-blog-api?retryWrites=true&w=majority', {
useNewUrlParser: true
}, (err) => {
if (!err) {
log('MongoDB Connection Succeeded.')
} else {
log('Error in DB connection : ' + err)
}
});
require('../models/posts')
mongoose.connect()
可以像这样 (docs reference):
mongoose.connect(uri, options, function(error) {
// Check error in initial connection. There is no 2nd param to the callback.
});
// Or using promises
mongoose.connect(uri, options).then(
() => { /** ready to use. The `mongoose.connect()` promise resolves to mongoose instance. */ },
err => { /** handle initial connection error */ }
);
在进一步演示之前,首先,你的这个块是错误的:
if (!err) {
log('MongoDB Connection Succeeded.')
}
错误处理不会那样工作,这种情况永远不会发生,因为当没有错误时,没有理由调用检查这种情况的错误回调函数。
而是使用.then()块,作为一个成功的连接returns一个Promise:
mongoose.connect(uri, options).then(
() => { console.log('MongoDB Connection Succeeded.') },
err => { console.log(err) }
);
// OR use .catch() after .then()
mongoose.connect(uri, options).then(() => console.log('MongoDB Connection Succeeded.')).catch( err => console.log(err))
您的答案: 将 socketTimeoutMS
设置为 60000 或 90000。
如果仍然无效,请将 connectTimeoutMS=90000
和 reconnectTries=1000
也添加到 options
。
声明一个名为options
的新变量(这个名字是任意的,但最好遵循惯例),你把你的useNewUrlParser: true
也放在那里(reference):
const options = {
useNewUrlParser: true,
socketTimeoutMS: 60000 //or 90000
}
提示:您还可以在连接字符串中将驱动程序选项指定为 URI (reference) 的查询字符串部分中的参数:
{main-url}?socketTimeoutMS=90000
,即:
const uri = mongodb+srv://chanlay:chanlay123@yky-api-ajgvf.mongodb.net/yky-blog-api?retryWrites=true&w=majority?socketTimeoutMS=90000
但坚持使用 options
变量,因为它更清晰、更易读且更易于维护(否则您会将所有内容都放在一个字符串中,这会使您更难阅读和调试)。
请在我的回答中留下评论作为反馈或报告持续错误,让我知道。
当我启动服务器时,显示如下错误:
Error in DB connection : Error: queryTxt ETIMEOUT yky-api-ajgvf.mongodb.net
为了解决这个问题,我尝试了很多次都无法正常工作。我什至无法在 heroku 上正确部署我的项目。非常喜欢nodejs,现在只想暂时放弃继续学习Nodejs
如果可能的话,有人帮我解决我的问题。我是正在学习的Node.Js。已经有四五个月了。之前决定学leranPHP,现在还在努力学习nodejs
我是新手。 :)
这是我的小项目中的配置数据库代码。
const mongoose = require('mongoose')
const log = console.log
mongoose.connect('mongodb+srv://chanlay:chanlay123@yky-api-ajgvf.mongodb.net/yky-blog-api?retryWrites=true&w=majority', {
useNewUrlParser: true
}, (err) => {
if (!err) {
log('MongoDB Connection Succeeded.')
} else {
log('Error in DB connection : ' + err)
}
});
require('../models/posts')
mongoose.connect()
可以像这样 (docs reference):
mongoose.connect(uri, options, function(error) {
// Check error in initial connection. There is no 2nd param to the callback.
});
// Or using promises
mongoose.connect(uri, options).then(
() => { /** ready to use. The `mongoose.connect()` promise resolves to mongoose instance. */ },
err => { /** handle initial connection error */ }
);
在进一步演示之前,首先,你的这个块是错误的:
if (!err) {
log('MongoDB Connection Succeeded.')
}
错误处理不会那样工作,这种情况永远不会发生,因为当没有错误时,没有理由调用检查这种情况的错误回调函数。
而是使用.then()块,作为一个成功的连接returns一个Promise:
mongoose.connect(uri, options).then(
() => { console.log('MongoDB Connection Succeeded.') },
err => { console.log(err) }
);
// OR use .catch() after .then()
mongoose.connect(uri, options).then(() => console.log('MongoDB Connection Succeeded.')).catch( err => console.log(err))
您的答案: 将 socketTimeoutMS
设置为 60000 或 90000。
如果仍然无效,请将 connectTimeoutMS=90000
和 reconnectTries=1000
也添加到 options
。
声明一个名为options
的新变量(这个名字是任意的,但最好遵循惯例),你把你的useNewUrlParser: true
也放在那里(reference):
const options = {
useNewUrlParser: true,
socketTimeoutMS: 60000 //or 90000
}
提示:您还可以在连接字符串中将驱动程序选项指定为 URI (reference) 的查询字符串部分中的参数:
{main-url}?socketTimeoutMS=90000
,即:
const uri = mongodb+srv://chanlay:chanlay123@yky-api-ajgvf.mongodb.net/yky-blog-api?retryWrites=true&w=majority?socketTimeoutMS=90000
但坚持使用 options
变量,因为它更清晰、更易读且更易于维护(否则您会将所有内容都放在一个字符串中,这会使您更难阅读和调试)。
请在我的回答中留下评论作为反馈或报告持续错误,让我知道。