将module.exports分配给函数返回的未定义方法

贾斯汀

我正在整合breeze.js,试图将此文件(github复制到coffeescript并在我的项目中使用它。下面是我的翻译,然后我开始了module.exports

d_b = (database) ->
    MongoClient = require('mongodb').MongoClient
    db = null

    mongoURL = "mongodb://localhost/project_db"
    mongoOptions = server: {auto_reconnect: true}

    getDB = (next) ->
        console.log 'getDB()'
        if db
            next null, db

        else
            MongoClient.connect mongoUrl, mongoOptions, (err, project_db) ->
                if err
                    err.message = (err.message or '') + '\nIs the MongoDb server running?'
                    next err
                else
                    db = project_db
                    next null, db

    database.getDB = getDB
    return

module.exports = d_b

当我使用它时,我会得到一个错误提示。

# in another file
database = require '../database'
database.getDB (err, db) ->
    # ...

TypeError: Object function (database) {
    var MongoClient, db, getDB, mongoOptions, mongoURL;
    MongoClient = require('mongodb').MongoClient;
    db = null;
    mongoURL = "mongodb://localhost/project_db";
    mongoOptions = {
      server: {
        auto_reconnect: true
      }
    };
    getDB = function(next) {
      console.log('getDB()');
      if (db) {
        return next(null, db);
      } else {
        return MongoClient.connect(mongoUrl, mongoOptions, function(err, project_db) {
          if (err) {
            err.message = (err.message || '') + '\nIs the MongoDb server running?';
            return next(err);
          } else {
            db = utourney_db;
            return next(null, db);
          }
        });
      }
    };
    database.getDB = getDB;
  } has no method 'getDB'
米歇尔·提里(Michelle Tilley)

您要移植的原始代码是一个立即调用的函数module.exports,该函数以作为第一个参数的形式调用因此,更直接的翻译是:

((database) ->
    MongoClient = require('mongodb').MongoClient
    db = null

    mongoURL = "mongodb://localhost/project_db"
    mongoOptions = server: {auto_reconnect: true}

    getDB = (next) ->
        console.log 'getDB()'
        if db
            next null, db

        else
            MongoClient.connect mongoUrl, mongoOptions, (err, project_db) ->
                if err
                    err.message = (err.message or '') + '\nIs the MongoDb server running?'
                    next err
                else
                    db = project_db
                    next null, db

    database.getDB = getDB
    return
)(module.exports)

在CoffeeScript中,我可能会更像这样编写模块:

MongoClient = require('mongodb').MongoClient
db = null

mongoURL = "mongodb://localhost/project_db"
mongoOptions = server: {auto_reconnect: true}

module.exports = (next) ->
    console.log 'getDB()'
    if db
        next null, db

    else
        MongoClient.connect mongoUrl, mongoOptions, (err, project_db) ->
            if err
                err.message = (err.message or '') + '\nIs the MongoDb server running?'
                next err
            else
                db = project_db
                next null, db

然后您可以像这样使用它:

database = require '../database'
database (err, db) ->
  # ...

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

javascript:将函数分配给变量填充未定义的变量

将未定义的值分配给构造函数中的属性

为什么在调用成员函数时将MySQL池分配给成员变量的原因恢复为未定义?

module.exports返回未定义

module.exports返回未定义

将变量分配给函数返回?

如何将字符串 [] 分配给没有未定义的常量?

将变量分配给一个非常大的数组使其未定义

无法将“字符串”类型分配给“未定义”类型

Ajax成功将数据分配给具有data [0]的变量是未定义的

如何将类的未定义属性分配给其他对象列表

为什么将功能分配给std :: function会导致未定义的引用?

Promise.all错误-无法将类型'(视频|未定义)[]'分配给类型'视频[]'

ReferenceError:未定义xxxx ...将php变量分配给javascript

来自@Input 时未定义将 ngModel 分配给属性

将 .subscribe 的结果分配给它后未定义的接口数组

为什么当我将值重新分配给函数内的变量时,该变量变为未定义并且出现类型错误?

节点module.exports返回未定义

module.exports返回值未定义

在 module.exports 中使用的函数中未定义

XSLT将函数返回值分配给变量

无法将返回的函数分配给主变量

SQUIRREL:将函数的返回值分配给变量

将函数返回的值分配给指针

如果没有分配给 module.exports,Node.js 'require()' 会返回什么

PHP:将函数分配给类方法

将 setTimeout 函数分配给 Vue 方法

将类方法结果分配给构造函数参数

将函数分配给实例的方法