没有结果,Sequelize Include无效

时间:2018-11-13 11:44:23

标签: postgresql typescript sequelize.js sequelize-cli

我正在做下面的选择,当它有返回结果时,它工作得很好,当我没有时,我会遇到这样的错误

  

TypeError:无法读取null的属性“ id”

仅当他们的城市没有任何标记时才发生,否则它将按预期工作。有人有这个问题吗?错误发生在或wihout where子句

            City.findById(req.params.id,{
                include: [{   model: Marker, as: "markers",
                          where: {
                              status: '1'
                          },
                }]
              }).then(city =>{
                console.log(city.id);
                   res.status(201).send(city);
              }) .catch(error => {
               console.log(error);
               res.status(400).send(error)
             });

城市

            module.exports = (sequelize, DataTypes) => {
              const City = sequelize.define('city', {
              name: { type: DataTypes.STRING, allowNull: false },
                status: { type: DataTypes.INTEGER, allowNull: false },
                latitude: { type: DataTypes.DECIMAL, allowNull: false },
                longitude: { type: DataTypes.DECIMAL, allowNull: false },

              }, { freezeTableName: true});
              City.associate = function(models) {
                // associations can be defined here
                 City.hasMany(models.marker,{as: 'markers', foreignKey: 'cityId'})
              };
              return City;
            };

标记

            module.exports = (sequelize, DataTypes) => {
              const Marker = sequelize.define('marker', {
                description: { type: DataTypes.STRING, allowNull: false },
                status: { type: DataTypes.INTEGER, allowNull: false },
                latitude: { type: DataTypes.DECIMAL, allowNull: false },
                longitude: { type: DataTypes.DECIMAL, allowNull: false },
                cityId: {
                   type: DataTypes.INTEGER,
                   references: {
                      model: 'city',
                      key: 'id',
                   },
                   allowNull: false,
                }

              }, { freezeTableName: true});
              Marker.associate = function(models) {
                // associations can be defined here
              };
              return Marker;
            };

查询已记录。

Executing (default): SELECT "city"."id", "city"."name", "city"."status", "city".
"latitude", "city"."longitude", "city"."createdAt", "city"."updatedAt", "markers
"."id" AS "markers.id", "markers"."description" AS "markers.description", "marke
rs"."status" AS "markers.status", "markers"."latitude" AS "markers.latitude", "m
arkers"."longitude" AS "markers.longitude", "markers"."cityId" AS "markers.cityI
d", "markers"."createdAt" AS "markers.createdAt", "markers"."updatedAt" AS "mark
ers.updatedAt" FROM "city" AS "city" INNER JOIN "marker" AS "markers" ON "city".
"id" = "markers"."cityId" AND "markers"."status" = '1' WHERE "city"."id" = '4';

1 个答案:

答案 0 :(得分:1)

是因为这一行:

console.log(city.id);

citynull时(查询与数据库中的任何文档都不匹配时发生),您的代码将求值为null.id,这是无效的,因此是错误。 / p>