【问题标题】:Check MongoDB status in node js在节点 js 中检查 MongoDB 状态
【发布时间】:2017-02-02 11:41:10
【问题描述】:

我需要能够在节点 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'
});

});

我对这一切都很陌生,所以任何帮助都将不胜感激。我可能理解我的想法是错误的 - 如果有其他方法请告诉我

【问题讨论】:

  • 用 ajax 发送一个虚拟请求,如果失败,你有状态吗?
  • 有没有办法从一个文件中做到这一点?我之前没有做过ajax

标签: javascript node.js mongodb


【解决方案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 => {});

【讨论】:

    【解决方案2】:

    您可以像从终端一样使用 nodejs 子进程模块来运行 shell 命令。在终端中,您将“服务 mongod 状态”,在 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}`);
    });
    

    【讨论】:

    • 我得到以下信息:SyntaxError: Unexpected token > on this part 'stderr) => {'
    • 你的 nodejs 版本可能不支持新的函数箭头语法,用普通的 javascript 函数更改箭头 exec('service mongod status', function(error, stdout, stderr){ ...}));如果它给你关于 ${stdout} 和 $ 的其余变量的错误,只需使用普通字符串连接更改该符号,如 console.log('stderr: ' + stderr);确保在编写此代码时使用正确的字符。如果您注意到不能只是复制粘贴我编写的函数,因为它没有使用 ' 而是使用 `,它们是不同的字符...
    【解决方案3】:

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

    db.serverConfig.isConnected();
    

    【讨论】:

    • db 变量从何而来?
    • 创建客户端实例并连接到 MongoDB 时的 From 方法
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-08-30
    • 2018-06-15
    • 2021-12-17
    • 1970-01-01
    • 2019-03-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多