开放接口 |ReactNative:生成的模型抛出"Invalid Date at [native code]:null in toISOString"



我使用openApi为我的react native生成api和模型的生成器前端。我从来没有遇到过任何问题,直到今天,当生成一些(不相关的)api后,我的一个模型开始抛出一个错误,每次它必须在api中使用:

Invalid Date
at [native code]:null in toISOString
at app/screens/host/user/EmailVerificationScreen.tsx:110:20 in resend

如果我去到错误指示的行,我找到我的api参数:

let parameter = {
type: VerificationCodeType.Email,
user: context.state.user, 
};

错误是由具有以下结构(由openApi生成)的user参数抛出的:

export interface User {
/**
* 
* @type {number}
* @memberof User
*/
id?: number;
/**
* 
* @type {string}
* @memberof User
*/
name?: string;
/**
* 
* @type {string}
* @memberof User
*/
email?: string;
/**
* 
* @type {string}
* @memberof User
*/
phone?: string;
/**
* 
* @type {string}
* @memberof User
*/
locale?: string;
/**
* 
* @type {Date}
* @memberof User
*/
emailVerifiedAt?: Date;
/**
* 
* @type {Date}
* @memberof User
*/
phoneVerifiedAt?: Date;
}

特别是问题似乎是emailVerifiedAt,在生成的模型中,它得到json:

export function UserToJSON(value: User | null): any {
console.log(value);
if (value === undefined) {
return undefined;
}
if (value === null) {
return null;
}
return {

'id': value.id,
'name': value.name,
'email': value.email,
'phone': value.phone,
'locale': value.locale,
'email_verified_at': value.emailVerifiedAt === undefined ? undefined : (value.emailVerifiedAt.toISOString().substr(0,10)), <= this
'phone_verified_at': value.phoneVerifiedAt === undefined ? undefined : (value.phoneVerifiedAt.toISOString().substr(0,10)),
};
}

正如你所看到的,它被检查为未定义(这个屏幕只显示当emailVerifiedAt是null(手动交换检查从未定义到null不改变结果)),如果它不是它被翻译。

因为只有当emailVerifiedAt为null时才会显示此屏幕这个错误有点阻塞。

在GitHub上打开一个问题之前,我想确保这不是我做错了什么,或者我没有得到。

你知道是什么问题吗?

如果你需要其他的东西,请注释,我会添加一个编辑。

这可能是浏览器的问题。我在使用Safari时遇到了同样的错误,但在Chrome中工作得很好。

Safari无法处理带有-字符的日期,您的API可能会返回这些字符。如果是这种情况,那么我建议您查看以下解决方案:https://stackoverflow.com/a/5646753.

基本上你必须用/替换所有的-字符。这样做的问题是,日期验证发生在自动生成的客户机中,它在将数据模型传递给应用程序之前创建数据模型。返回的数据模型将已经包含一个Invalid Date对象。

OpenAPI生成的客户端必须手工编辑。你可以为你的日期对象提供一个自定义模板,或者让作者实现它。

最新更新