文档对象 toJSON 方法

文档对象 toJSON 方法

为什么我不调用 toJSON 也可以返回没有密码的信息?

    const userData = await service.user.findByUsername(ctx.state.user.username);
    ctx.helper.success({ ctx, res: userData });

等价

    const userData = await service.user.findByUsername(ctx.state.user.username);
    ctx.helper.success({ ctx, res: userData?.toJSON() });

正在回答

登陆购买课程后可参与讨论,去登陆

3回答

同学你好

ctx.body = 的时候,它会做这样的处理

检查对应的赋值对象有没有 toJSON 方法,如果有就调用,没有就直接返回。可以看一下这个例子测试一下。

const theData = {
    username: '1234',
    toJSON: () => {
        const data = { username: 'hello' };
        return data;
    }
};
ctx.helper.success({ ctx, res: theData });

我们设想它应该返回 1234,但是实际上它返回的是 hello,这就是整个它处理的方式。

  • 慕粉3946981 提问者 #1

    多谢指点,其实说白了就是自动帮我调用一下 toJSON 这个方法,如果没有调用的情况下。

    2022-11-16 23:19:13
张轩 2022-11-15 15:36:43

同学你好

如果你在程序中打印 userData,就会发现加不加 toJSON 是有区别的。

所以原因应该是 success 方法中,ctx.body 会自动调用对象的 toJSON 方法,最终出来的结果就是没有密码

的版本了。

  • 提问者 慕粉3946981 #1

    这边为什么会自动调用对象的 toJSON 方法?不理解,如果自动调用了 toJSON,那我先调用文档对象 userData 的 toJSON 方法,再传递到 success 方法中也没有报错。

    2022-11-15 18:30:14
张轩 2022-11-15 08:40:33

同学你好 请提供一下你的代码库 我再本地帮你看一下

  • 提问者 慕粉3946981 #1

    老师你好 请查看 app/controller/user.ts 文件中的 show 方法

    gitee.com/xiebinyin/lego-backend.git

    2022-11-15 08:57:32
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师