检查节点js中的MongoDB状态

时间:2017-02-02 11:41:10

标签: javascript node.js mongodb

我需要能够从节点js文件运行“/etc/init.d/mongod status”或“service mongod status”,以便将响应存储在数据库中。

当我在命令行中运行上述命令时,我得到以下响应:

● mongod.service - SYSV: Mongo is a scalable, document-oriented database.
   Loaded: loaded (/etc/rc.d/init.d/mongod)
   Active: active (running) since Thu 2017-02-02 08:07:42 UTC; 3h 27min ago
     Docs: man:systemd-sysv-generator(8)
  Process: 793 ExecStart=/etc/rc.d/init.d/mongod start (code=exited, status=0/SUCCESS)
 Main PID: 1027 (mongod)
   CGroup: /system.slice/mongod.service
           └─1027 /usr/bin/mongod -f /etc/mongod.conf

但是,我想在我编写的API响应中包含此状态。因此,当用户请求我的API时,我希望它返回mongoDB状态检查,如上所示。

我尝试过以下方法:

router.get('/ status',function(req,res){

var databaseCheck = service mongod status // not sure how to do this
res.json({
    mongoResponse: '//to have the above status check response here'
});

});

我是这一切的新手,所以任何帮助都将不胜感激。我可能理解我的想法是错误的 - 请告诉我是否有不同的方式来做到这一点

3 个答案:

答案 0 :(得分:1)

连接一个数据库,然后像 db.serverConfig.isConnected() 这样检查连接。下面的代码是一个完整的例子。

const app = express();

let dbClient;
let db;
let collection;

MongoClient.connect(configuration.mongoDbUri, { useNewUrlParser: true, poolSize: 30 }, (error, client) => {
  if (error) {
    console.log("Connection failed for some reason. Err: ", error);
    return error;
  }
  db = client.db("myDB");
  dbClient = client;
  collection = db.collection('myCollection');
  app.locals.mongoDb = db;
});

app.get("/status", (req, res) => {
  if (db.serverConfig.isConnected()) {   
    console.log("db.serverConfig.isConnected :", db.serverConfig.isConnected());
    return res.send({ result: true});
  }
  return res.send({ result: false});
});

app.listen(configuration.app.port, error => {});

答案 1 :(得分:0)

您可以使用nodejs子进程模块来运行shell命令,就像从终端运行一样。在终端中,您将服务mongod status",在nodejs子进程中,您可以通过将该命令作为参数放入子进程执行函数来执行相同的操作,如下所示:

const exec = require('child_process').exec;
exec('service mongod status', (error, stdout, stderr) => {
  if (error) {
    console.error(`exec error: ${error}`);
    return;
  }
  console.log(`stdout: ${stdout}`);
  console.log(`stderr: ${stderr}`);
});

答案 2 :(得分:0)

在你的应用中尝试这样的代码:

=split(join(Parameters!ParamX.Value,","),",")