Sequelize Include 在没有结果的情况下不起作用
Sequelize Include doesn't work without results
我正在执行下面的 select,当结果为 return 时效果很好,当我没有时,我会遇到这样的错误
TypeError: Cannot read property 'id' of null
这只会在他们的城市没有任何标记时发生,否则它会按预期工作。有人有这个问题吗?无论是否使用 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';
是因为这一行:
console.log(city.id);
当 city
为 null
时,当查询与数据库中的任何文档都不匹配时,您的代码计算结果为 null.id
,这是无效的,因此会出现错误.
我正在执行下面的 select,当结果为 return 时效果很好,当我没有时,我会遇到这样的错误
TypeError: Cannot read property 'id' of null
这只会在他们的城市没有任何标记时发生,否则它会按预期工作。有人有这个问题吗?无论是否使用 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';
是因为这一行:
console.log(city.id);
当 city
为 null
时,当查询与数据库中的任何文档都不匹配时,您的代码计算结果为 null.id
,这是无效的,因此会出现错误.