在MongoDB 3.6 NodeJS驱动程序中断言?以及如何在使用promise实现时使用assert?

时间:2018-04-23 00:59:50

标签: javascript node.js mongodb reactjs express

在MongoDB 3.6驱动程序中,当我通过回调连接到mongodb主机时,我按照快速入门指南进行操作:

来自示例:

const MongoClient = require('mongodb').MongoClient;
const assert = require('assert');

// Connection URL
const url = 'mongodb://localhost:27017';

// Database Name
const dbName = 'myproject';

// Use connect method to connect to the server
MongoClient.connect(url, function(err, client) {
  assert.equal(null, err);
  console.log("Connected successfully to server");

  const db = client.db(dbName);

  client.close();
});

什么是断言功能用法? 如果在promise方法中实现,我该如何使用assert?

从我的项目中,我不知道应该在哪里放置“断言”函数。 下面是我的server.js

import express from 'express';
import path from 'path';
import bodyParser from 'body-parser';
import { MongoClient } from 'mongodb';
import assert from 'assert';

const app = express();
const MONGO_URL = 'mongodb://localhost:27017';
const dbName = 'inventory';
app.use(express.static('../public'));
app.use(bodyParser.json());

app.get('/api/issues', (req, res) => {
  db.collection('issues').find().toArray().then(issues => {
    const metadata = { total_count: issues.length };
    res.json({ _metadata: metadata, records: issues })
  }).catch(error => {
    console.log(error);
    res.status(500).json({ message: `Internal Server Error: ${error}` });
  });
});

let db;
MongoClient.connect(MONGO_URL).then(client => {
  db = client.db(dbName);

  app.listen(4000, () => {
    console.log('App started on port 4000');
  });
}).catch(error => {
  console.log('ERROR:', error);
});

1 个答案:

答案 0 :(得分:3)

当您使用回调样式时,如果发生错误,err参数将出现此类错误,因此将不会是null

所以断言:

MongoClient.connect(url, function(err, client) {
  assert.equal(null, err); // guarantees err is null, so no error has occurred

在代码继续之前,确保errnull


承诺风格中,您不需要断言。如果发生错误,将调用.catch

所以,你需要做的是在你的承诺中宣布一个.catch(),你已经做过了:

MongoClient.connect(MONGO_URL).then(client => {
  ...
}).catch(error => {                     // this catch will be called when an error occurs
  console.log('ERROR:', error);
});



注意:最后,如果您使用async / await,则必须声明catchtry/catch来处理错误。 E.g。

(async () => {
    try {
        let client = await MongoClient.connect(MONGO_URL)
        ...
    } catch(error) {                     // this catch will be called when an error occurs
      console.log('ERROR:', error);
    }
})();