使用Node JS导出函数

时间:2016-06-03 11:43:12

标签: node.js

我需要Node.Js中函数导出的帮助

这是我的 module.js

var knex = require('knex')({
    client : 'mysql',
    connection : {
        host : 'localhost',
        user : 'root',
        password : '123',
        database : 'dbNode'
    }
}),bookshelf = require('bookshelf')(knex);

var user = bookshelf.Model.extend({
   tableName : 'tblUsers',
   idAttribute : 'email'
});

var note = bookshelf.Model.extend({
   tableName : 'tblNotes',
   idAttribute : 'noteId'
});


module.exports = {
   User : user,
   Note : note,

};

module.exports = function(owner) {
  return knex('note').where('public',1).orWhere({ownerName : owner}).select('noteId');
}

我必须导出函数和书架模型(用户和注释)但当我尝试使用Model.User时它会返回错误: Model.User不是函数 < / p>

3 个答案:

答案 0 :(得分:5)

查看您的代码

module.exports = {
    ...
};

module.exports = function(owner) {
    ...
}

您要为同一个变量分配两个不同的东西。第二个任务会覆盖第一个任务。

要执行您要求的操作,您需要先导出该功能,然后单独添加属性:

module.exports = function(owner) {
    ...
}

module.exports.User = user;
module.exports.Note = note;

这是节点

中的标准

答案 1 :(得分:3)

不要使用note定义uservar,而是使用exports.noteexports.user

 exports.user = bookshelf.Model.extend({
    tableName : 'tblUsers',
    idAttribute : 'email'
 });

 exports.note = bookshelf.Model.extend({
    tableName : 'tblNotes',
    idAttribute : 'noteId'
 });

然后您更有可能将函数导出设置为命名函数。 (或者让它上课?)

 exports.MyClass = function(owner) {
   return knex('note').where('public',1).orWhere({ownerName : owner}).select('noteId');
 }

如果您担心导入的简易性,可以将MyClass分配给变量,而不是整个包

 var MyClass=require('module').MyClass;

答案 2 :(得分:0)

您输入“module.exports”的内容已导出。

如果您多次使用它,最后一个会覆盖其他所有内容。在你的情况下,你将一个函数放入其中,它覆盖了User和Note之前的对象。

在您的情况下,这可以是解决方案

module.exports = {
   User : user,
   Note : note,
   returnNoteByOwner(owner) {
      knex('note').where('public',1).orWhere({ownerName : owner}).select('noteId');
   }
};

然后您可以按照以下方式访问它

var module = require('module');
console.log(module.User);
console.log(module.Note);
console.log(module.returnNoteByOwner('hisName'));