Sequelize Include не работает без результатов
Я делаю выбор ниже, и он прекрасно работает, когда у него есть результаты, чтобы вернуться, когда у меня нет, у меня появляется такая ошибка
TypeError: Невозможно прочитать свойство 'id' из 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 ответ
Решение
Это из-за этой строки:
console.log(city.id);
когда city
является null
, что происходит, когда запрос не соответствует ни одному документу в базе данных, ваш код оценивается как null.id
, что неверно, отсюда и ошибка.