我的功能有问题,以获取数据库中的所有文章。
文章数据库:id |标题|价格|描述
图像数据库:id |ArticleID |名称
当我记录数据"文章"时,它是未定义的。
client.query('SELECT * FROM articles', function (err, result) {
if (err) throw err;
if (result.rowCount != 0) {
var articles = [];
result.rows.forEach(function (entry) {
client.query('SELECT name FROM images WHERE articleid = $1', [entry.id], function (err, result) {
if (err) throw err;
var article = [];
var images = [];
result.rows.forEach(function (entry) {
images.push(entry.name);
});
article = entry;
article.images = images;
articles.push(article);
});
});
console.log(articles);
res.send(articles);
}
res.send();
});
我建议您将semelize用作应用程序的ORM,因为它可以易于处理数据库,甚至让您直接查询数据库:
例如,您需要为数据库中的每个表定义一个类:
型号/aCTICE.JS
var Article = sequelize.define("Article", {
id: { type: DataTypes.INTEGER, primaryKey: true},
name: { type: DataTypes.STRING, name: 'name' },
...
}, {
classMethods: {
associate: function(models) {
Article.hasMany(models.Image);
}
}
});
请注意,您与图像表定义了一对一关系。
模型/image.js
var Image = sequelize.define("Image", {
id: { type: DataTypes.INTEGER, primaryKey: true},
url: { type: DataTypes.STRING, name: 'name' },
...
}, {
classMethods: {
associate: function(models) {
Image.belogsTo(models.Article);
}
}
});
请注意,您指出与文章的一对一关系。
最后,您可以使用上面的类来查询数据库:
app.get(function(req, res, next) {
models.Article
.findAll({
includes: [{
model: models.Image
}]
})
.then(function(articles) {
res.json(articles);
});
});
在这种情况下,您查询所有文章,并包含属于该文章的图像列表。
您甚至可以在下一个语法之后运行普通查询:
var queryString = 'select * from Article a join Image i on a.id = i.articleId where articleId = :articleId';
models.sequelize
.query(queryString, {
replacements: { articleId: req.params.id },
type: models.sequelize.QueryTypes.SELECT
})
.then(function(articles) {
res.json(articles)
});
在这里,您可以找到一个如何在项目中配置续集的示例:http://docs.sequeslizejs.com/en/1.7.0/articles/articles/express/