psql nodejs变量未定义



我的功能有问题,以获取数据库中的所有文章。

文章数据库: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/

最新更新