【问题标题】:Assert in MongoDB 3.6 NodeJS driver? And how to use assert when using promise implementation?在 MongoDB 3.6 NodeJS 驱动程序中断言?以及在使用promise实现时如何使用assert?
【发布时间】:2018-10-02 23:17:46
【问题描述】:

在 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();
});

assert 函数的用法是什么? 如果在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);
});

【问题讨论】:

    标签: javascript node.js mongodb reactjs express


    【解决方案1】:

    当你使用回调样式时,当发生错误时,err 参数会出现这样的错误,因此不会是null

    所以断言:

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

    存在以确保在代码继续之前errnull


    Promise 风格 中,您不需要断言。如果发生错误,将调用.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,则必须声明try/catch 块的catch 来处理错误。例如

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

    【讨论】:

    • 非常感谢,acdcjunior。天气晴朗。看起来“异步”范式比“承诺”范式更好?
    猜你喜欢
    • 1970-01-01
    • 2014-06-29
    • 2018-06-19
    • 2014-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多