Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使用Node.js从Sequelize查询中打印出具有关联的顺序数据?_Javascript_Node.js_Ecmascript 6_Sequelize.js_Es6 Promise - Fatal编程技术网

Javascript 如何使用Node.js从Sequelize查询中打印出具有关联的顺序数据?

Javascript 如何使用Node.js从Sequelize查询中打印出具有关联的顺序数据?,javascript,node.js,ecmascript-6,sequelize.js,es6-promise,Javascript,Node.js,Ecmascript 6,Sequelize.js,Es6 Promise,我试图从demo Node.js应用程序和Sequelize中获得一个简单的顺序输出,但我似乎无法理解承诺和蓝鸟以及它们如何帮助我。我想要的输出是: User: John Doe Project: "Acme Website": Sample project Project: "PMC Website": Sample project Total projects: 2 User: Jane Doe Project: "ABC Website": Sample

我试图从demo Node.js应用程序和Sequelize中获得一个简单的顺序输出,但我似乎无法理解承诺和蓝鸟以及它们如何帮助我。我想要的输出是:

User: John Doe
    Project: "Acme Website": Sample project
    Project: "PMC Website": Sample project

    Total projects: 2

User: Jane Doe
    Project: "ABC Website": Sample project

    Total projects: 1

User: Jill Doe
    No projects

Total users: 3
我不是在用快车。这只是一个演示应用程序,可以解决所有这些问题

这是我的
用户
型号:

// models/user.js
'use strict';
module.exports = (sequelize, DataTypes) => {
  var User = sequelize.define('User', {
    firstName: DataTypes.STRING,
    lastName: DataTypes.STRING,
    email: DataTypes.STRING
  }, {});
  User.associate = function(models) {
    // associations can be defined here
    User.hasMany(models.Project);
  };
  return User;
};
// models/project.js
'use strict';
module.exports = (sequelize, DataTypes) => {
  var Project = sequelize.define('Project', {
    title: DataTypes.STRING,
    description: DataTypes.TEXT
  }, {});
  Project.associate = function(models) {
    // associations can be defined here
    Project.belongsTo(models.User);
  };
  return Project;
};
这是我的
项目
模型:

// models/user.js
'use strict';
module.exports = (sequelize, DataTypes) => {
  var User = sequelize.define('User', {
    firstName: DataTypes.STRING,
    lastName: DataTypes.STRING,
    email: DataTypes.STRING
  }, {});
  User.associate = function(models) {
    // associations can be defined here
    User.hasMany(models.Project);
  };
  return User;
};
// models/project.js
'use strict';
module.exports = (sequelize, DataTypes) => {
  var Project = sequelize.define('Project', {
    title: DataTypes.STRING,
    description: DataTypes.TEXT
  }, {});
  Project.associate = function(models) {
    // associations can be defined here
    Project.belongsTo(models.User);
  };
  return Project;
};
我写的代码显然不起作用:

User.findAndCountAll().then((result) => {
  if (result.count > 0) {
    let users = result.rows;

    users.forEach((user, index, arr) => {
        console.log('User: ' + user.firstName + ' ' + user.lastName + ' <' + user.email + '>' + '\n' );
        user.getProjects().then((projects) => {
          projects.forEach((project, index, arr) => {
            console.log('\tProject: "' + project.title + '": ' + project.description + '\n');
          });
        }).then((projects) => {
          console.log('\tTotal projects: xxx'); // xxx should be the count
        });
      }
    );

    console.log('Total users: ' + result.count);
  } else {
    console.log('No users');
  }
});

虽然这确实给了我预期的输出,但我相信我一直在试图用JavaScript解决错误的问题。因此,我不想将该答案标记为已接受,因为我的错误问题没有正确答案。

用下面的代码更改代码并检查

User.findAndCountAll({
    include:{
        model:model.project // your project model
    }
}).then( result => {    
    console.log( "result=====>",result);
    result.forEach((user, index, arr) => {
        console.log('User: ' + user.firstName + ' ' + user.lastName + ' <' + user.email + '>' + '\n' );
        user.project.forEach((projects, index, arr) => {
            console.log('\tProject: "' + project.title + '": ' + project.description + '\n');
        });
    }
});
User.findAndCountAll({
包括:{
模型:model.project//您的项目模型
}
})。然后(结果=>{
console.log(“结果====>”,结果);
result.forEach((用户、索引、arr)=>{
console.log('User:'+User.firstName+''+User.lastName+''+'\n');
user.project.forEach((项目、索引、arr)=>{
console.log('\t项目:'+project.title+':'+project.description+'\n');
});
}
});


检查您的控制台并相应地打印数据。

顺序
您希望请求以串行方式而不是并行方式发出吗?@CertainPerformance“请求”的确切含义是什么?在本例中,答案可能是肯定的。我不确定这会有什么帮助。我能够打印每个用户在一开始的顺序中,但我的需求现在因关联而变得复杂。你将在结果中获得用户和项目的所有详细信息。这不起作用,但我包括关联不是我想要的。包括或调用getAssociation无关紧要,因为我仍然不知道如何显示eac的计数在所有行显示完毕后,设置一组行。只需添加user.project.length作为计数,然后使用我以前尝试过的解决方案“完成”,但这无助于我学习如何使用Sequelize/Bluebird返回的承诺。请理解,这不是我需要完成的项目。我需要学习。