我正在expressjs中开发一个register函数,但由于某种原因,返回了以下消息:
TypeError: Cannot read properties of undefined (reading 'id')
这是我的模型:Users.ts
interface UserAttributes {
id: number;
first_name: string;
last_name: string;
password: string;
email:string;
token: string;
description?: string;
createdAt?: Date;
updatedAt?: Date;
deletedAt?: Date;
}
'use strict';
const {
Model, Optional
} = require('sequelize');
module.exports = (sequelize, DataTypes) => {
class Users extends Model<UserAttributes> {
public id!: number;
public first_name!: string;
public last_name!:string;
public email!: string;
public password!: string;
public token!: string;
// timestamps!
public readonly createdAt!: Date;
public readonly updatedAt!: Date;
public readonly deletedAt!: Date;
static associate(models) {
// define association here
}
}
Users.init({
id: {
type:DataTypes.INTEGER,
primaryKey:true
},
password: DataTypes.STRING,
firstName: DataTypes.STRING,
lastName: DataTypes.STRING,
token: DataTypes.STRING,
}, {
sequelize,
modelName: 'Users',
tableName:'users',
});
return Users;
};
这是寄存器控制器:
async function Register (req:Request, res:Response): Promise<Response> {
try {
const {id, first_name, last_name, email, password, token} = req.body;
await Users.find(email);
const encrypt: typeof Users = await bcrypt.hash(password, 10);
const user: typeof Users = await Users.create({first_name, last_name, email: email.toLowerCase(), password: encrypt});
const Token: typeof Users = await jwt.sign({user_id: user.id?.toString(), email:user.email}, process.env.TOKEN_SECRET);
user.token = Token;
return res.status(200).json(user);
} catch (error) {
console.error('User couldnt be registered', error);
}
};
错误消息如下:TypeError: Cannot read properties of undefined (reading 'id')
如果有人能告诉我代码出了什么问题,我会非常感激的。
谢谢祝你今天愉快。
1条答案
按热度按时间z9smfwbn1#
错误消息"类型错误:无法读取undefined的属性(读取"id")"可能是由以下代码行引起的:
Users.create
方法返回的user
对象似乎是undefined
,因此user.id
属性也未定义,无法访问。您可以尝试通过添加console.log语句来调试这个问题,以便在create方法调用之后打印user的值。
另一个问题是以下代码行
应该是
find方法在sequelize中不可用。
另外,在Users.init中,您定义了firstName、lastName,但在Register函数中使用的是first_name、last_name。
应该确保向create方法传递正确的值,并且create方法返回一个非未定义的对象。