Javascript 如何使用Node.js从Sequelize查询中打印出具有关联的顺序数据?
我试图从demo 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
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返回的承诺。请理解,这不是我需要完成的项目。我需要学习。