Node.js mongoose到mongoDB连接故障
我有一个奇怪的情况——四天的毫无结果的搜索和实验。我用教程在我的Ubuntu 16.04上安装了mongoDB 3.2.8。因此,我得到以下结果:Node.js mongoose到mongoDB连接故障,node.js,mongodb,ubuntu,express,mongoose,Node.js,Mongodb,Ubuntu,Express,Mongoose,我有一个奇怪的情况——四天的毫无结果的搜索和实验。我用教程在我的Ubuntu 16.04上安装了mongoDB 3.2.8。因此,我得到以下结果: maksim@maksim:~$ sudo systemctl status mongodb [sudo] пароль для maksim: ● mongodb.service - High-performance, schema-free document-oriented database Loaded: loaded (/et
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.
但结果如下:
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
3未定义,11未定义,未定义-是我内部检查的东西-算了吧。最后两个字符串是EventListeners。
我不认为配置文件中有错误,因为我也从中获取了端口3000设置,并正确地使用“nconf”导出端口设置
{
"port": 3000,
"mongoose": {
"uri": "mongodb://127.0.0.1:27017/chat",
"options": {
"server": {
"socketOptions": {
"keepAlive": 1
}
}
}
}
}
重要提示:当我将mongoose设置直接放入app.js时,mongoose与mongoDB连接正确
{
"port": 3000,
"mongoose": {
"uri": "mongodb://127.0.0.1:27017/chat",
"options": {
"server": {
"socketOptions": {
"keepAlive": 1
}
}
}
}
}
希望,我没有让你太累。
我想了解调用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
- 猫鼬4.5.7
- 节点4.2.6
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
sudo chmod 755 /etc/init.d/disable-transparent-hugepages
无法重新启动mongod,因为您在/etc/systemd/system/mongodb.service中设置了mongodb.service;这就是找不到mongod.service的原因。如果要重新启动mongo,请使用此选项
sudo service mongodb start
键入mongo命令时会出现警告,但该命令有效。在您发出警告后,您会看到这个符号
,这样您就可以看到您的mongo数据库了
因此,键入mongo命令并尝试以下操作:
show dbs;
如果您看到区域设置数据库,这意味着它可以工作
如果要修复警告,应该安装linux内核。但是在安装内核之前,您可以尝试以下方法
他们说在/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
保存文件并键入以下命令:
mongo
sudo chmod 755 /etc/init.d/disable-transparent-hugepages
以及:
然后重新启动服务器
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
希望有帮助。您已经有了mongod流程。mongod是“Mongo守护进程”,您不必使用它。这就是为什么你有:
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
sudo chmod 755 /etc/init.d/disable-transparent-hugepages
无法重新启动mongod,因为您在/etc/systemd/system/mongodb.service中设置了mongodb.service;这就是找不到mongod.service的原因。如果要重新启动mongo,请使用此选项
sudo service mongodb start
键入mongo命令时会出现警告,但该命令有效。在您发出警告后,您会看到这个符号
,这样您就可以看到您的mongo数据库了
因此,键入mongo命令并尝试以下操作:
show dbs;
如果您看到区域设置数据库,这意味着它可以工作
如果要修复警告,应该安装linux内核。但是在安装内核之前,您可以尝试以下方法
他们说在/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
保存文件并键入以下命令:
mongo
sudo chmod 755 /etc/init.d/disable-transparent-hugepages
以及:
然后重新启动服务器
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
希望有帮助。我的应用程序:
.
├── app.js
├── bin
├── config
├── createDb.js
├── libs
├── models
├── node_modules
├── package.json
├── public
├── routes
└── views
如果不方便阅读,请原谅——我现在才学会“树”
我的/config/config.json
:
{
"port": 3000,
"mongoose": {
"uri": "mongodb://127.0.0.1:27017/chat",
"options": {
"server": {
"socketOptions": {
"keepAlive": 1
}
}
}
}
}
和/config/index.js
:
var nconf = require('nconf');
var path = require('path');
nconf.argv();
nconf.env();
nconf.file({ file: path.join(__dirname, 'config.json') });
module.exports = nconf;
var mongoose = require('mongoose');
var configure = require('../config');
// ('nconf');
mongoose.connect(configure.get("mongoose: uri"), configure.get("mongoose: options"));
module.exports = mongoose;
var crypto = require("crypto");
var mongoose = require('../libs/mongoose');
var Schema = mongoose.Schema;
var schema = new Schema({
username: {
type: String,
unique: true,
required: true
},
hashedPassword: {
type: String,
required: true
},
salt: {
type: String,
required: true
},
created: {
type: Date,
default: Date.now
}
});
schema.methods.encryptPassword = function(password){
return crypto.createHmac('sha1', this.salt).update(password).digest('hex');
};
schema.virtual('password')
.set(function(password){
this._plainPassword = password;
this.salt = Math.random() + '';
this.hashedPassword = this.encryptPassword(password);
})
.get(function(){return this._plainPassword});
schema.methods.checkPassword = function(password){
return this.encryptPassword(password) ===this.hashedPassword;
};
var User = mongoose.model('User', schema);
module.exports = User;
var mongoose = require('mongoose');
var User = require('./models/user');
var user = new User({
username: "Tester3",
password: "secret"
});
console.log(user);
mongoose.connection.on('connecting', function() {
console.log("TRY to Connecting to database")
});
mongoose.connection.on('connected', function() {
console.log("Connected to database")
});
mongoose.connection.on('error',function (err) {
console.log('Mongoose default connection error: ' + err);
});
mongoose.connection.on('disconnected', function () {
console.log('Mongoose default connection disconnected');
});
var process = { env: { ENV: '' } };
if (process.env.ENV === 'staging') {
console.log('1' + process.env.MONGODB_URI);
} else if (process.env.ENV === 'production') {
console.log('2');
} else {
console.log('3' + process.env.MONGODB_URI);
} if (process.env.ENV === 'staging' || 'production') {
console.log('11' + process.env.MONGODB_URI);
} else {
console.log('12');
}
var mongoUri = process.env.MONGOLAB_URI;
console.log(mongoUri);
/config
目录中没有其他文件
进一步的/libs/mongoose.js
:
var nconf = require('nconf');
var path = require('path');
nconf.argv();
nconf.env();
nconf.file({ file: path.join(__dirname, 'config.json') });
module.exports = nconf;
var mongoose = require('mongoose');
var configure = require('../config');
// ('nconf');
mongoose.connect(configure.get("mongoose: uri"), configure.get("mongoose: options"));
module.exports = mongoose;
var crypto = require("crypto");
var mongoose = require('../libs/mongoose');
var Schema = mongoose.Schema;
var schema = new Schema({
username: {
type: String,
unique: true,
required: true
},
hashedPassword: {
type: String,
required: true
},
salt: {
type: String,
required: true
},
created: {
type: Date,
default: Date.now
}
});
schema.methods.encryptPassword = function(password){
return crypto.createHmac('sha1', this.salt).update(password).digest('hex');
};
schema.virtual('password')
.set(function(password){
this._plainPassword = password;
this.salt = Math.random() + '';
this.hashedPassword = this.encryptPassword(password);
})
.get(function(){return this._plainPassword});
schema.methods.checkPassword = function(password){
return this.encryptPassword(password) ===this.hashedPassword;
};
var User = mongoose.model('User', schema);
module.exports = User;
var mongoose = require('mongoose');
var User = require('./models/user');
var user = new User({
username: "Tester3",
password: "secret"
});
console.log(user);
mongoose.connection.on('connecting', function() {
console.log("TRY to Connecting to database")
});
mongoose.connection.on('connected', function() {
console.log("Connected to database")
});
mongoose.connection.on('error',function (err) {
console.log('Mongoose default connection error: ' + err);
});
mongoose.connection.on('disconnected', function () {
console.log('Mongoose default connection disconnected');
});
var process = { env: { ENV: '' } };
if (process.env.ENV === 'staging') {
console.log('1' + process.env.MONGODB_URI);
} else if (process.env.ENV === 'production') {
console.log('2');
} else {
console.log('3' + process.env.MONGODB_URI);
} if (process.env.ENV === 'staging' || 'production') {
console.log('11' + process.env.MONGODB_URI);
} else {
console.log('12');
}
var mongoUri = process.env.MONGOLAB_URI;
console.log(mongoUri);
进一步介绍/models/user.js
:
var nconf = require('nconf');
var path = require('path');
nconf.argv();
nconf.env();
nconf.file({ file: path.join(__dirname, 'config.json') });
module.exports = nconf;
var mongoose = require('mongoose');
var configure = require('../config');
// ('nconf');
mongoose.connect(configure.get("mongoose: uri"), configure.get("mongoose: options"));
module.exports = mongoose;
var crypto = require("crypto");
var mongoose = require('../libs/mongoose');
var Schema = mongoose.Schema;
var schema = new Schema({
username: {
type: String,
unique: true,
required: true
},
hashedPassword: {
type: String,
required: true
},
salt: {
type: String,
required: true
},
created: {
type: Date,
default: Date.now
}
});
schema.methods.encryptPassword = function(password){
return crypto.createHmac('sha1', this.salt).update(password).digest('hex');
};
schema.virtual('password')
.set(function(password){
this._plainPassword = password;
this.salt = Math.random() + '';
this.hashedPassword = this.encryptPassword(password);
})
.get(function(){return this._plainPassword});
schema.methods.checkPassword = function(password){
return this.encryptPassword(password) ===this.hashedPassword;
};
var User = mongoose.model('User', schema);
module.exports = User;
var mongoose = require('mongoose');
var User = require('./models/user');
var user = new User({
username: "Tester3",
password: "secret"
});
console.log(user);
mongoose.connection.on('connecting', function() {
console.log("TRY to Connecting to database")
});
mongoose.connection.on('connected', function() {
console.log("Connected to database")
});
mongoose.connection.on('error',function (err) {
console.log('Mongoose default connection error: ' + err);
});
mongoose.connection.on('disconnected', function () {
console.log('Mongoose default connection disconnected');
});
var process = { env: { ENV: '' } };
if (process.env.ENV === 'staging') {
console.log('1' + process.env.MONGODB_URI);
} else if (process.env.ENV === 'production') {
console.log('2');
} else {
console.log('3' + process.env.MONGODB_URI);
} if (process.env.ENV === 'staging' || 'production') {
console.log('11' + process.env.MONGODB_URI);
} else {
console.log('12');
}
var mongoUri = process.env.MONGOLAB_URI;
console.log(mongoUri);
此外,我将用户导出到createDb.js
中。因此,我的createDb.js
:
var nconf = require('nconf');
var path = require('path');
nconf.argv();
nconf.env();
nconf.file({ file: path.join(__dirname, 'config.json') });
module.exports = nconf;
var mongoose = require('mongoose');
var configure = require('../config');
// ('nconf');
mongoose.connect(configure.get("mongoose: uri"), configure.get("mongoose: options"));
module.exports = mongoose;
var crypto = require("crypto");
var mongoose = require('../libs/mongoose');
var Schema = mongoose.Schema;
var schema = new Schema({
username: {
type: String,
unique: true,
required: true
},
hashedPassword: {
type: String,
required: true
},
salt: {
type: String,
required: true
},
created: {
type: Date,
default: Date.now
}
});
schema.methods.encryptPassword = function(password){
return crypto.createHmac('sha1', this.salt).update(password).digest('hex');
};
schema.virtual('password')
.set(function(password){
this._plainPassword = password;
this.salt = Math.random() + '';
this.hashedPassword = this.encryptPassword(password);
})
.get(function(){return this._plainPassword});
schema.methods.checkPassword = function(password){
return this.encryptPassword(password) ===this.hashedPassword;
};
var User = mongoose.model('User', schema);
module.exports = User;
var mongoose = require('mongoose');
var User = require('./models/user');
var user = new User({
username: "Tester3",
password: "secret"
});
console.log(user);
mongoose.connection.on('connecting', function() {
console.log("TRY to Connecting to database")
});
mongoose.connection.on('connected', function() {
console.log("Connected to database")
});
mongoose.connection.on('error',function (err) {
console.log('Mongoose default connection error: ' + err);
});
mongoose.connection.on('disconnected', function () {
console.log('Mongoose default connection disconnected');
});
var process = { env: { ENV: '' } };
if (process.env.ENV === 'staging') {
console.log('1' + process.env.MONGODB_URI);
} else if (process.env.ENV === 'production') {
console.log('2');
} else {
console.log('3' + process.env.MONGODB_URI);
} if (process.env.ENV === 'staging' || 'production') {
console.log('11' + process.env.MONGODB_URI);
} else {
console.log('12');
}
var mongoUri = process.env.MONGOLAB_URI;
console.log(mongoUri);
最后的/bin/www/
:
#!/usr/bin/nodejs
//NODE_PATH=..
var debug = require('debug')('my-application');
var app = require('../app');
var MongoClient = require('../createDb');
var config = require('../config');
var log = require('../libs/log')(module);
app.set('port', process.env.PORT || config.get('port'));
var server = app.listen(app.get('port'), function() {
debug('Express server listening on port ' + server.address().port);
log.info('Express server listening on port ' + server.address().port);
});
因此,不幸的是,最终结果是这样的:
{ username: 'Tester3',
hashedPassword: 'f481d1150a2e44f10534d95384092c1852ff7e4d',
salt: '0.07912106881849468',
_id: 57a4dbaeb5aae5401c403fd2,
created: Fri Aug 05 2016 23:32:14 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
/etc/mongod.conf
以防万一(我删除了所有简短的注释):
我确信如果没有专家的帮助,我的问题是无法理解的。我的应用程序:
.
├── app.js
├── bin
├── config
├── createDb.js
├── libs
├── models
├── node_modules
├── package.json
├── public
├── routes
└── views
如果不方便阅读,请原谅——我现在才学会“树”
我的/config/config.json
:
{
"port": 3000,
"mongoose": {
"uri": "mongodb://127.0.0.1:27017/chat",
"options": {
"server": {
"socketOptions": {
"keepAlive": 1
}
}
}
}
}
和/config/index.js
:
var nconf = require('nconf');
var path = require('path');
nconf.argv();
nconf.env();
nconf.file({ file: path.join(__dirname, 'config.json') });
module.exports = nconf;
var mongoose = require('mongoose');
var configure = require('../config');
// ('nconf');
mongoose.connect(configure.get("mongoose: uri"), configure.get("mongoose: options"));
module.exports = mongoose;
var crypto = require("crypto");
var mongoose = require('../libs/mongoose');
var Schema = mongoose.Schema;
var schema = new Schema({
username: {
type: String,
unique: true,
required: true
},
hashedPassword: {
type: String,
required: true
},
salt: {
type: String,
required: true
},
created: {
type: Date,
default: Date.now
}
});
schema.methods.encryptPassword = function(password){
return crypto.createHmac('sha1', this.salt).update(password).digest('hex');
};
schema.virtual('password')
.set(function(password){
this._plainPassword = password;
this.salt = Math.random() + '';
this.hashedPassword = this.encryptPassword(password);
})
.get(function(){return this._plainPassword});
schema.methods.checkPassword = function(password){
return this.encryptPassword(password) ===this.hashedPassword;
};
var User = mongoose.model('User', schema);
module.exports = User;
var mongoose = require('mongoose');
var User = require('./models/user');
var user = new User({
username: "Tester3",
password: "secret"
});
console.log(user);
mongoose.connection.on('connecting', function() {
console.log("TRY to Connecting to database")
});
mongoose.connection.on('connected', function() {
console.log("Connected to database")
});
mongoose.connection.on('error',function (err) {
console.log('Mongoose default connection error: ' + err);
});
mongoose.connection.on('disconnected', function () {
console.log('Mongoose default connection disconnected');
});
var process = { env: { ENV: '' } };
if (process.env.ENV === 'staging') {
console.log('1' + process.env.MONGODB_URI);
} else if (process.env.ENV === 'production') {
console.log('2');
} else {
console.log('3' + process.env.MONGODB_URI);
} if (process.env.ENV === 'staging' || 'production') {
console.log('11' + process.env.MONGODB_URI);
} else {
console.log('12');
}
var mongoUri = process.env.MONGOLAB_URI;
console.log(mongoUri);
/config
目录中没有其他文件
进一步的/libs/mongoose.js
:
var nconf = require('nconf');
var path = require('path');
nconf.argv();
nconf.env();
nconf.file({ file: path.join(__dirname, 'config.json') });
module.exports = nconf;
var mongoose = require('mongoose');
var configure = require('../config');
// ('nconf');
mongoose.connect(configure.get("mongoose: uri"), configure.get("mongoose: options"));
module.exports = mongoose;
var crypto = require("crypto");
var mongoose = require('../libs/mongoose');
var Schema = mongoose.Schema;
var schema = new Schema({
username: {
type: String,
unique: true,
required: true
},
hashedPassword: {
type: String,
required: true
},
salt: {
type: String,
required: true
},
created: {
type: Date,
default: Date.now
}
});
schema.methods.encryptPassword = function(password){
return crypto.createHmac('sha1', this.salt).update(password).digest('hex');
};
schema.virtual('password')
.set(function(password){
this._plainPassword = password;
this.salt = Math.random() + '';
this.hashedPassword = this.encryptPassword(password);
})
.get(function(){return this._plainPassword});
schema.methods.checkPassword = function(password){
return this.encryptPassword(password) ===this.hashedPassword;
};
var User = mongoose.model('User', schema);
module.exports = User;
var mongoose = require('mongoose');
var User = require('./models/user');
var user = new User({
username: "Tester3",
password: "secret"
});
console.log(user);
mongoose.connection.on('connecting', function() {
console.log("TRY to Connecting to database")
});
mongoose.connection.on('connected', function() {
console.log("Connected to database")
});
mongoose.connection.on('error',function (err) {
console.log('Mongoose default connection error: ' + err);
});
mongoose.connection.on('disconnected', function () {
console.log('Mongoose default connection disconnected');
});
var process = { env: { ENV: '' } };
if (process.env.ENV === 'staging') {
console.log('1' + process.env.MONGODB_URI);
} else if (process.env.ENV === 'production') {
console.log('2');
} else {
console.log('3' + process.env.MONGODB_URI);
} if (process.env.ENV === 'staging' || 'production') {
console.log('11' + process.env.MONGODB_URI);
} else {
console.log('12');
}
var mongoUri = process.env.MONGOLAB_URI;
console.log(mongoUri);
进一步介绍/models/user.js
:
var nconf = require('nconf');
var path = require('path');
nconf.argv();
nconf.env();
nconf.file({ file: path.join(__dirname, 'config.json') });
module.exports = nconf;
var mongoose = require('mongoose');
var configure = require('../config');
// ('nconf');
mongoose.connect(configure.get("mongoose: uri"), configure.get("mongoose: options"));
module.exports = mongoose;
var crypto = require("crypto");
var mongoose = require('../libs/mongoose');
var Schema = mongoose.Schema;
var schema = new Schema({
username: {
type: String,
unique: true,
required: true
},
hashedPassword: {
type: String,
required: true
},
salt: {
type: String,
required: true
},
created: {
type: Date,
default: Date.now
}
});
schema.methods.encryptPassword = function(password){
return crypto.createHmac('sha1', this.salt).update(password).digest('hex');
};
schema.virtual('password')
.set(function(password){
this._plainPassword = password;
this.salt = Math.random() + '';
this.hashedPassword = this.encryptPassword(password);
})
.get(function(){return this._plainPassword});
schema.methods.checkPassword = function(password){
return this.encryptPassword(password) ===this.hashedPassword;
};
var User = mongoose.model('User', schema);
module.exports = User;
var mongoose = require('mongoose');
var User = require('./models/user');
var user = new User({
username: "Tester3",
password: "secret"
});
console.log(user);
mongoose.connection.on('connecting', function() {
console.log("TRY to Connecting to database")
});
mongoose.connection.on('connected', function() {
console.log("Connected to database")
});
mongoose.connection.on('error',function (err) {
console.log('Mongoose default connection error: ' + err);
});
mongoose.connection.on('disconnected', function () {
console.log('Mongoose default connection disconnected');
});
var process = { env: { ENV: '' } };
if (process.env.ENV === 'staging') {
console.log('1' + process.env.MONGODB_URI);
} else if (process.env.ENV === 'production') {
console.log('2');
} else {
console.log('3' + process.env.MONGODB_URI);
} if (process.env.ENV === 'staging' || 'production') {
console.log('11' + process.env.MONGODB_URI);
} else {
console.log('12');
}
var mongoUri = process.env.MONGOLAB_URI;
console.log(mongoUri);
此外,我将用户导出到createDb.js
中。因此,我的createDb.js
:
var nconf = require('nconf');
var path = require('path');
nconf.argv();
nconf.env();
nconf.file({ file: path.join(__dirname, 'config.json') });
module.exports = nconf;
var mongoose = require('mongoose');
var configure = require('../config');
// ('nconf');
mongoose.connect(configure.get("mongoose: uri"), configure.get("mongoose: options"));
module.exports = mongoose;
var crypto = require("crypto");
var mongoose = require('../libs/mongoose');
var Schema = mongoose.Schema;
var schema = new Schema({
username: {
type: String,
unique: true,
required: true
},
hashedPassword: {
type: String,
required: true
},
salt: {
type: String,
required: true
},
created: {
type: Date,
default: Date.now
}
});
schema.methods.encryptPassword = function(password){
return crypto.createHmac('sha1', this.salt).update(password).digest('hex');
};
schema.virtual('password')
.set(function(password){
this._plainPassword = password;
this.salt = Math.random() + '';
this.hashedPassword = this.encryptPassword(password);
})
.get(function(){return this._plainPassword});
schema.methods.checkPassword = function(password){
return this.encryptPassword(password) ===this.hashedPassword;
};
var User = mongoose.model('User', schema);
module.exports = User;
var mongoose = require('mongoose');
var User = require('./models/user');
var user = new User({
username: "Tester3",
password: "secret"
});
console.log(user);
mongoose.connection.on('connecting', function() {
console.log("TRY to Connecting to database")
});
mongoose.connection.on('connected', function() {
console.log("Connected to database")
});
mongoose.connection.on('error',function (err) {
console.log('Mongoose default connection error: ' + err);
});
mongoose.connection.on('disconnected', function () {
console.log('Mongoose default connection disconnected');
});
var process = { env: { ENV: '' } };
if (process.env.ENV === 'staging') {
console.log('1' + process.env.MONGODB_URI);
} else if (process.env.ENV === 'production') {
console.log('2');
} else {
console.log('3' + process.env.MONGODB_URI);
} if (process.env.ENV === 'staging' || 'production') {
console.log('11' + process.env.MONGODB_URI);
} else {
console.log('12');
}
var mongoUri = process.env.MONGOLAB_URI;
console.log(mongoUri);
最后的/bin/www/
:
#!/usr/bin/nodejs
//NODE_PATH=..
var debug = require('debug')('my-application');
var app = require('../app');
var MongoClient = require('../createDb');
var config = require('../config');
var log = require('../libs/log')(module);
app.set('port', process.env.PORT || config.get('port'));
var server = app.listen(app.get('port'), function() {
debug('Express server listening on port ' + server.address().port);
log.info('Express server listening on port ' + server.address().port);
});
因此,不幸的是,最终结果是这样的:
{ username: 'Tester3',
hashedPassword: 'f481d1150a2e44f10534d95384092c1852ff7e4d',
salt: '0.07912106881849468',
_id: 57a4dbaeb5aae5401c403fd2,
created: Fri Aug 05 2016 23:32:14 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
/etc/mongod.conf
以防万一(我删除了所有简短的注释):
我确信,如果没有专家的帮助,我的问题是无法理解的。谢谢!警告现在不显示。但是我的猫鼬没有连接到mongoDB。我会整理更多。我编辑了我的答案。你的NodeJS应用程序中有这个吗?您的服务器上有mongodb的dbpath吗
cd/data/db/
请原谅,稍后再回答。命令cd/data/db
表示没有这样的文件或目录。但是mongod.conf说dbpath是/var/lib/mongodb
。我能用它做什么