Sequelize Include не работает без результатов - PullRequest
0 голосов
/ 13 ноября 2018

Я делаю выборку ниже, и она прекрасно работает, когда у нее есть результаты, чтобы вернуться, когда у меня нет, у меня появляется ошибка вроде этой

TypeError: Невозможно прочитать свойство 'id'of null

Это происходит только в том случае, если в городе нет маркеров, в противном случае он работает как положено.У кого-нибудь была эта проблема?Ошибка возникает с или без, где регистрируется запрос

            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 голосов
/ 13 ноября 2018

Это из-за этой строки:

console.log(city.id);

Когда city равно null, что происходит, когда запрос не соответствует ни одному документу в базе данных, ваш код оценивается как null.id,что неверно, следовательно, ошибка.

...