Node.js mongoose到mongoDB连接故障

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

我有一个奇怪的情况——四天的毫无结果的搜索和实验。我用教程在我的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 (/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

您已经有了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

希望有帮助。

您已经有了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
。我能用它做什么