Sequelize.js 对对象上的函数列表进行续集

Sequelize.js 对对象上的函数列表进行续集,sequelize.js,Sequelize.js,有没有办法使用Sequelize(sequelizejs.com)输出我设置关联时在对象上神奇地创建的所有函数 比如,;我有一个用户模型,我设置了 User.belongtomany(用户,{as:'Friends',通过:'userfriends'}) 现在我可以打电话了 User.create({ name: Faker.name.findName() }).then((user) => { user.createFriend({ name: Fa

有没有办法使用Sequelize(sequelizejs.com)输出我设置关联时在对象上神奇地创建的所有函数

比如,;我有一个用户模型,我设置了

User.belongtomany(用户,{as:'Friends',通过:'userfriends'})

现在我可以打电话了

User.create({
    name: Faker.name.findName()
 }).then((user) => {
     user.createFriend({
         name: Faker.name.findName()
     })
});
createFriend
函数是可能的,因为belongTomany关系

是否有方法输出在用户(或用户)上创建的所有函数


有时候,我并不清楚我可以对一个对象调用什么,如果我能以某种方式输出它,它会对我有所帮助。

我无法找到一种方法轻松注销所有的神奇功能。但是如果你看一下源代码,它们都在每种关系的访问器之下,并解释了它们的作用

sequelize/lib/associations/
-

属于许多人:

get: 'get' + plural,
set: 'set' + plural,
addMultiple: 'add' + plural,
add: 'add' + singular,
create: 'create' + singular,
remove: 'remove' + singular,
removeMultiple: 'remove' + plural,
hasSingle: 'has' + singular,
hasAll: 'has' + plural,
count: 'count' + plural
属于:

get: 'get' + singular,
set: 'set' + singular,
create: 'create' + singular
有许多:

get: 'get' + plural,
set: 'set' + plural,
addMultiple: 'add' + plural,
add: 'add' + singular,
create: 'create' + singular,
remove: 'remove' + singular,
removeMultiple: 'remove' + plural,
hasSingle: 'has' + singular,
hasAll: 'has' + plural,
count: 'count' + plural
有一个:

get: 'get' + singular,
set: 'set' + singular,
create: 'create' + singular

我也遇到了这个问题,所以我做了一些挖掘,并提出了一种列出所有有用属性/关联函数/公共函数的方法。请记住,其中一些函数可能有一个或多个参数。这也可能不适用于您的Sequelize版本,因为我正在深入挖掘内部以输出这些数据,当然它们可能会发生更改。希望这对你有帮助

const models = require('./models');

for (let model of Object.keys(models)) {
  if(!models[model].name)
    continue;

  console.log("\n\n----------------------------------\n", 
  models[model].name, 
  "\n----------------------------------");

  console.log("\nAttributes");
  for (let attr of Object.keys(models[model].attributes)) {
      console.log(models[model].name + '.' + attr);
  }

  console.log("\nAssociations");
  for (let assoc of Object.keys(models[model].associations)) {
    for (let accessor of Object.keys(models[model].associations[assoc].accessors)) {
      console.log(models[model].name + '.' + models[model].associations[assoc].accessors[accessor]+'()');
    }
  }

  console.log("\nCommon");
  for (let func of Object.keys(models[model].Instance.super_.prototype)) {
    if(func === 'constructor' || func === 'sequelize')
      continue;
    console.log(models[model].name + '.' + func+'()');
  }
}
输出将类似于:

 ----------------------------------
 Assignment
 ----------------------------------

 Attributes
 Assignment.id
 Assignment.type
 Assignment.type_id
 Assignment.created_at
 Assignment.updated_at
 Assignment.user_id
 Assignment.reporter_id

 Associations
 Assignment.getUser()
 Assignment.setUser()
 Assignment.createUser()
 Assignment.getReporter()
 Assignment.setReporter()
 Assignment.createReporter()
 Assignment.getPost_assignment()
 Assignment.setPost_assignment()
 Assignment.createPost_assignment()
 Assignment.getHistory()
 Assignment.setHistory()
 Assignment.addHistory()
 Assignment.addHistory()
 Assignment.createHistory()
 Assignment.removeHistory()
 Assignment.removeHistory()
 Assignment.hasHistory()
 Assignment.hasHistory()
 Assignment.countHistory()

 Common
 Assignment.where()
 Assignment.toString()
 Assignment.getDataValue()
 Assignment.setDataValue()
 Assignment.get()
 Assignment.set()
 Assignment.setAttributes()
 Assignment.changed()
 Assignment.previous()
 Assignment._setInclude()
 Assignment.save()
 Assignment.reload()
 Assignment.validate()
 Assignment.hookValidate()
 Assignment.update()
 Assignment.updateAttributes()
 Assignment.destroy()
 Assignment.restore()
 Assignment.increment()
 Assignment.decrement()
 Assignment.equals()
 Assignment.equalsOneOf()
 Assignment.setValidators()
 Assignment.toJSON()

对于任何未来的访问者,TeeTwoEx代码到目前为止不起作用,但是如果您只希望获得像您的模型一样的功能,那么有一种解决方法。如果你问我的话,TeeTwoEx在一个无名英雄之后拯救了生命和灵魂

const models=require('./src/models/index');
for(让对象的模型。键(模型)){
如果(模型[model].name=='Sequelize')
继续;
如果(!models[model].name)
继续;
console.log(“\n\n--------------------------------------\n”,
模型[model]。名称,
“\n------------------------------------------”;
console.log(“\n关联”);
for(让Object.key(models[model].associations)关联起来){
for(让对象.key(模型[model].关联[assoc].访问器)的访问器访问){
console.log(models[model].name+'.+models[model].assoc.accessors[accessor]+'()');
}
}
}

您不能在promise的已实现回调中调试它吗?您的意思是要调试用户对象吗?我在那里找不到createFriend的任何引用,因此它似乎(正如我所期望的)是一个神奇的函数。我不知道您是如何调试它的,但是如果与node inspector一起使用,那么在Chrome开发工具中,您可以看到函数的主体。我只使用了terminal,但使用Chrome听起来更好xD,我将对此进行研究,谢谢您的帮助!生成函数的输出仍然是一个很好的特性。也许我会要求它。有复数的getA吗。。。假设用户有很多朋友,我想找一个符合特定条件的朋友