我需要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>
答案 0 :(得分:5)
查看您的代码
module.exports = {
...
};
module.exports = function(owner) {
...
}
您要为同一个变量分配两个不同的东西。第二个任务会覆盖第一个任务。
要执行您要求的操作,您需要先导出该功能,然后单独添加属性:
module.exports = function(owner) {
...
}
module.exports.User = user;
module.exports.Note = note;
这是节点
中的标准答案 1 :(得分:3)
不要使用note
定义user
和var
,而是使用exports.note
和exports.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'));