2016-04-25 71 views
1

我有我已經在端口3000和4000 創建一個數據庫中的Web服務器的創建,並有3個集2層的Web服務器..兩臺服務器可以訪問一個共同的MongoDB數據庫

顯示DBS 當地0.000 GB sensor_db 0.000GB 使用sensor_db 切換到DB sensor_db 秀收藏 傳感器 templategroups 模板

第二臺服務器是否可以訪問創建的數據庫?如果是的話,我無法訪問集合..是否有任何語法呢?

1日服務器:

var express = require('express'); 
var app= express(); 
var path = require('path'); 
var bodyParser= require('body-parser'); 

var mongoose = require('mongoose'); 
mongoose.connect('mongodb://localhost/sensor_db'); 
var Schema = mongoose.Schema; 

var sensorSchema = new Schema({ 
    value:{ type:Number, default:0}, 
    format:{type:String, default:"default"}, 
    id:{type:Number,required:true,unique:true}, 
    description:{type:String}, 
    type:{type:String}, 
    groupId:{type:Number}, 
    users:{type:Array,default:[]}, 
    admin:{type:String,default:'Undefined'}, 
    status:{type:String,default:'Undefined'}, 
    owner:{type:String,default:'Undefined'}, 
    templateId:{type:Number} 

}); 
var Sensor = mongoose.model('Sensor',sensorSchema); 

app.get('/sensorlist',function(req,res) { 
    console.log("I recieved a GET /sensorlist request"); 
    Sensor.find(function(err,data){ 
    if (err) return console.error(err); 
    console.log(data); 
    res.json(data) 
    }); 
}); 

app.post('/check/health',function(req,res){ 
    socket.emit('data', 'I need your health status', function ack(data) { 
    console.log('data emit was acknowledged by Monitoring Server:', data); 
    return res.json(data); 
    }); 
}); 

第二個服務器:

var app = require('express')(); 
var server = require('http').Server(app); 
var io = require('socket.io')(server); 
var express = require('express'); 

io.on('connection', function(socket){ 
    console.log('connection received from Provisioning'); 

    // To get messages from Provisioning server 
    socket.on('data', function(data, ack) { 
    console.log('Message from provision is : ' + ': ' + data); 
    ack('here is your data - 1111'); 
    console.log("Trying to access the Sensor_DB Database"); 

    Sensor.find(function(err,data){ 
     if(err) return console.error(err); 
     console.log(data); 
     //res.json(data); 
    }); 
    }); 
}); 

server.listen(4000, function(){ 
    console.log('socket.io server listening on *:4000'); 
}); 

我得到錯誤 - 傳感器沒有定義

,不勝感謝 傑西

我試圖dispay集合一旦它連接到數據庫但收到此錯誤消息:無法完成d屬性'hasListCollectionsCommand'爲空

var mongoose = require('mongoose'); 
mongoose.connect('mongodb://127.0.0.1:27017/sensor_db') ; 
    console.log("successfully connected to the database"); 
//mongoose.connection.db 
mongoose.connection.db.listCollections().toArray(function(err, names) { 
    if (err) { 
    console.log(err); 
    } 
    else { 
    names.forEach(function(e,i,a) { 
     mongoose.connection.db.dropCollection(e.name); 
     console.log("--->>", e.name); 
    }); 
    } 
}); 
+1

許多客戶端可以同時訪問mongodb數據庫。兩個服務器只是兩個客戶端mongodb ..它應該能夠訪問.. –

+0

http://stackoverflow.com/questions/28593616/how-do-you-access-a-mongodb-database-from-two-openshift -apps這可以幫助你,我相信 –

+0

感謝您的鏈接,但那與OpenShift有關? –

回答

0

兩個不同的服務器不能共享傳感器對象的同一個實例。

var mongoose = require('mongoose'); 
    mongoose.connect('mongodb://localhost/sensor_db'); 
    var Schema = mongoose.Schema; 

var sensorSchema = new Schema({ 
    value:{ type:Number, default:0}, 
    format:{type:String, default:"default"}, 
    id:{type:Number,required:true,unique:true}, 
    description:{type:String}, 
    type:{type:String}, 
    groupId:{type:Number}, 
    users:{type:Array,default:[]}, 
    admin:{type:String,default:'Undefined'}, 
    status:{type:String,default:'Undefined'}, 
    owner:{type:String,default:'Undefined'}, 
    templateId:{type:Number} 

    }); 
var Sensor = mongoose.model('Sensor',sensorSchema); 

此代碼聲明一個服務器的架構不是第二個。所以你必須在第二個服務器中聲明實例。

與mongo數據庫問題不相關的問題是傳感器實例在第二個服務器中沒有任何聲明。

+0

非常感謝 –

相關問題