gpt4 book ai didi

node.js - mongoose 到 mongoDB 连接失败

转载 作者:太空宇宙 更新时间:2023-11-04 03:30:25 25 4
gpt4 key购买 nike

我遇到了一个奇怪的情况 - 四天的搜索和实验毫无结果。我在 Ubuntu 16.04 上安装了 mongoDB 3.2.8 this教程。所以我得到以下结果:

maksim@maksim:~$ sudo systemctl status mongodb 
[sudo] пароль для maksim:
● mongodb.service - High-performance, schema-free document-oriented database
Loaded: loaded (/etc/systemd/system/mongodb.service; disabled; vendor preset:
Active: active (running) since Чт 2016-08-04 18:03:00 YEKT; 4h 31min ago
Main PID: 11147 (mongod) CGroup: /system.slice/mongodb.service
└─11147 /usr/bin/mongod --quiet --config /etc/mongod.conf

авг 04 18:03:00 maksim systemd[1]: Started High-performance, schema-free documen lines 1-8/8 (END)

所以我猜 mongoDB 可以工作

当我输入 mongo 时,我得到以下结果:

maksim@maksim:~$ mongo
MongoDB shell version: 3.2.8
connecting to: test
Server has startup warnings:
2016-08-04T18:03:01.968+0500 I CONTROL [initandlisten]
2016-08-04T18:03:01.968+0500 I CONTROL [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/enabled is 'always'.
2016-08-04T18:03:01.968+0500 I CONTROL [initandlisten] ** We suggest setting it to 'never'
2016-08-04T18:03:01.968+0500 I CONTROL [initandlisten]
2016-08-04T18:03:01.968+0500 I CONTROL [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always'.
2016-08-04T18:03:01.968+0500 I CONTROL [initandlisten] ** We suggest setting it to 'never'
2016-08-04T18:03:01.968+0500 I CONTROL [initandlisten]
>

当我输入 mongod 时,我得到了:

maksim@maksim:~$ mongod
2016-08-04T22:51:16.857+0500 I CONTROL [initandlisten] MongoDB starting : pid=16018 port=27017 dbpath=/data/db 64-bit host=maksim
2016-08-04T22:51:16.857+0500 I CONTROL [initandlisten] db version v3.2.8
2016-08-04T22:51:16.857+0500 I CONTROL [initandlisten] git version: ed70e33130c977bda0024c125b56d159573dbaf0
2016-08-04T22:51:16.857+0500 I CONTROL [initandlisten] OpenSSL version: OpenSSL 1.0.2g-fips 1 Mar 2016
2016-08-04T22:51:16.857+0500 I CONTROL [initandlisten] allocator: tcmalloc
2016-08-04T22:51:16.857+0500 I CONTROL [initandlisten] modules: none
2016-08-04T22:51:16.857+0500 I CONTROL [initandlisten] build environment:
2016-08-04T22:51:16.857+0500 I CONTROL [initandlisten] distmod: ubuntu1404
2016-08-04T22:51:16.857+0500 I CONTROL [initandlisten] distarch: x86_64
2016-08-04T22:51:16.857+0500 I CONTROL [initandlisten] target_arch: x86_64
2016-08-04T22:51:16.857+0500 I CONTROL [initandlisten] options: {}
2016-08-04T22:51:16.886+0500 E NETWORK [initandlisten] listen(): bind() failed errno:98 Address already in use for socket: 0.0.0.0:27017
2016-08-04T22:51:16.886+0500 E NETWORK [initandlisten] addr already in use
2016-08-04T22:51:16.886+0500 E STORAGE [initandlisten] Failed to set up sockets during startup.
2016-08-04T22:51:16.886+0500 I CONTROL [initandlisten] dbexit: rc: 48

我注意到了错误(从底部开始的第四个字符串)。中间的字符串 (Ubuntu 14.04) 也让我感到尴尬,因为我有 Ubuntu 16.04。在一些教程或论坛(忘记在哪里,可能也在这里 - 我最近几天读过的大量信息)建议输入以下内容:

sudo service mongod start

但结果如下:

Failed to start mongod.service: Unit mongod.service not found.

有了这一切,我基于 mongoDB 的简单快速工件就可以正常工作了。但是当我安装 mongoose (4.5.7) 时,我开始遇到一个问题:mongoose 不想用我的 config.json 文件连接到 mongoDb:

maksim@maksim:~/jspract/osnmongoose/firstmongooseapp$ nodejs ./bin/www
{ username: 'Tester3',
hashedPassword: '230a508d5a8f3ddac8f5c52ec3439f25b9c730bd',
salt: '0.7840297885704786',
_id: 57a33d6bfa062be32b2d10a5,
created: Thu Aug 04 2016 18:04:43 GMT+0500 (YEKT) }
3undefined
11undefined
undefined
info: [bin/www] Express server listening on port 3000
Mongoose default connection disconnected
Mongoose default connection error: MongoError: getaddrinfo ENOTFOUND undefined undefined:27017

3undefined、11undefined、undefined - 是我内部检查的东西 - 算了。最后两个字符串是事件监听器。我不认为配置文件中有错误,因为我也从中获取了端口 3000 设置,并使用“nconf”正确导出端口设置。

{
"port": 3000,
"mongoose": {
"uri": "mongodb://127.0.0.1:27017/chat",
"options": {
"server": {
"socketOptions": {
"keepAlive": 1
}
}
}
}
}

重要说明:当我将 mongoose 设置直接放入 app.js 中时,mongoose 可以正确连接 mongoDB。

希望,我没有让你太累。我想了解调用 mongod 时导致错误的原因:

errno:98 Address already in use for socket: 0.0.0.0:27017

Failed to start mongod.service: Unit mongod.service not found.

Mongoose 与 mongoDB 的连接失败可能是由 mongod 错误引起的,还是最好在我的编程代码中找到错误?我相信,如果这个问题真的存在的话,Mongo 团队早就意识到这个问题了。我不明白发生了什么事。请告诉我。

我再说一遍:

  • Ubuntu 16.04,
  • mongoDB 3.2.8,
  • Mongoose 4.5.7,
  • nodejs 4.2.6

最佳答案

您已经有一个 mongod 进程。 mongod 是“Mongo Daemon”,你不必使用它。这就是为什么你有:

2016-08-04T22:51:16.886+0500 E NETWORK  [initandlisten] listen(): bind() failed errno:98 Address already in use for socket: 0.0.0.0:27017

如果您想访问 mongo,请输入以下命令:

mongo

无法重新启动 mongod,因为您在/etc/systemd/system/mongodb.service 中设置了 mongodb.service;这就是为什么找不到 mongod.service 的原因。如果你想重新启动 mongo 使用这个。

sudo service mongodb start 

当您输入 mongo 命令时会出现警告,但它可以工作。发出警告后,您将看到此符号 >,以便您可以查看您的 mongo 数据库。

因此,输入 mongo 命令并尝试以下操作:

show dbs;

如果您看到区域设置数据库,则表示它可以正常工作。

如果您想修复警告,您应该安装 Linux 内核。但在安装内核之前你可以尝试这个 https://docs.mongodb.com/manual/tutorial/transparent-huge-pages/

他们说在/etc/init.d/disable-transparent-hugepages 创建以下文件:

#!/bin/sh
### BEGIN INIT INFO
# Provides: disable-transparent-hugepages
# Required-Start: $local_fs
# Required-Stop:
# X-Start-Before: mongod mongodb-mms-automation-agent
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Disable Linux transparent huge pages
# Description: Disable Linux transparent huge pages, to improve
# database performance.
### END INIT INFO

case $1 in
start)
if [ -d /sys/kernel/mm/transparent_hugepage ]; then
thp_path=/sys/kernel/mm/transparent_hugepage
elif [ -d /sys/kernel/mm/redhat_transparent_hugepage ]; then
thp_path=/sys/kernel/mm/redhat_transparent_hugepage
else
return 0
fi

echo 'never' > ${thp_path}/enabled
echo 'never' > ${thp_path}/defrag

unset thp_path
;;
esac

保存文件并输入以下命令:

sudo chmod 755 /etc/init.d/disable-transparent-hugepages

还有:

sudo update-rc.d disable-transparent-hugepages defaults

并重新启动您的服务器。

Mongoose 端你应该像这样连接你的 NodeJS 应用程序:

server.js

var mongoose = require('mongoose');

mongoose.Promise = global.Promise;
mongoose.connect(mongodb://localhost/yourdatabase); // For Nginx
mongoose.connect(mongodb://localhost:27017/yourdatabase); // Basic

希望有帮助。

关于node.js - mongoose 到 mongoDB 连接失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38781523/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com