node.js - 我应该如何连接并将我的本地 mongoose db 移动到 mongodb 云图集?
问题描述
当我启动我的服务器时,显示如下错误:
Error in DB connection : Error: queryTxt ETIMEOUT yky-api-ajgvf.mongodb.net
为了解决这个问题,我多次尝试正常工作。我什至还不能在 heroku 上正确部署我的项目。我非常喜欢 nodejs,但现在我只想暂时放弃继续学习 nodejs。
如果可能的话,有人帮我解决我的问题。我是学习 Node.Js 的人。已经有四五个月了。在我决定学习 PHP 之前,但现在我仍在尝试学习 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()
看起来像这样(文档参考):
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()块,因为成功的连接会返回一个 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
to options
。
声明一个名为的新变量options
(名称是任意的,但最好遵循约定),然后把你的useNewUrlParser: true
也放在那里(参考):
const options = {
useNewUrlParser: true,
socketTimeoutMS: 60000 //or 90000
}
提示:您还可以将连接字符串中的驱动程序选项指定为 URI 的查询字符串部分中的参数(参考):
{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
变量,因为它更干净、更易读且更易于维护(否则你会将所有内容都放在一个字符串中,这会让你更难阅读和调试)。
请通过在我的回答中留下评论作为反馈或报告持续错误来让我知道。
推荐阅读
- javascript - 如何使用react useState添加数组的用户输入对象,当我在字段中键入并发送它时,它不会更新问题
- sql-insert - 多个 INSERT INTO 到单行
- bash - 如何在 perl 脚本中的现有 ssh 会话上使用期望,其中 bash 脚本已经通过管道传输给它们
- api - 如何在 FutureBuilder 中将 Provider 称为 Future?
- python-3.x - 从数据数组中删除特定数据
- c# - Uno 平台无法构建 Tizen、Skia.Gtk 或 Skia.Wpf
- vim - 在 vim 中进行键映射时命令计数丢失
- javascript - 如何使用递归将对象变成字符串?
- nuxt.js - 如何使用 Nuxt 实现服务器发送事件?
- javascript - TypeScript 错误 '(response) => void' 类型的参数不可分配给 '(value: void) => void | 类型的参数 承诺喜欢
'