【问题标题】:Node express (typescript) | serialize date type as epoach ms globally节点快递(打字稿)|将日期类型序列化为 epeach ms 全局
【发布时间】:2021-06-12 19:00:00
【问题描述】:

我希望配置基于节点的 API 后端,以将所有 Date 类型序列化为 Epoch millis 而不是 ISO。

例如,如果我有以下界面:

export interface Profile {
    updatedAt: Date;
    updatedBy: string;
}

当我将结构返回给客户端时:

 return res.status(OK).json(myProfile);

我收到以下回复:

   "updatedAt": "2021-06-08T17:06:44.412Z",
   "updatedBy": "825e9b827ce329a7ddc8fbdc3f714cbd1c239182"

我希望收到:

   "updatedAt":  1623172004412,
   "updatedBy": "825e9b827ce329a7ddc8fbdc3f714cbd1c239182"

并为我的所有端点全局执行一次 有什么想法吗?

【问题讨论】:

    标签: node.js typescript express


    【解决方案1】:

    要对任何字段执行此操作,对于任何对象,您可以定义一个新函数:

    let customJSON = (obj) => {
        Object.entries(obj).map(([k,v]) => v instanceOf Date && (obj[k] = new Date(v).getTime()));
        return obj;
    }
    

    然后在Express中注册这个函数作为中间件:

    app.use((req, res, next) => {
        const originalSON = res.json
        res.json = (status, data) => {
            originalSON.call(res, customJSON(data));
        }
        next();
    });
    
    

    这应该不需要更改您的呼叫站点:

    return res.status(OK).json(myProfile);
    

    【讨论】:

    • 感谢您的回答,但解决方案是解决我对特定类定义的问题,我正在寻找适用于所有 Date 类型的全局解决方案。
    • 感谢您的快速回复。我还有一个问题,JSON 函数是否执行了两次?一次用于 ISO 而不是 Epoch millis?
    • 不完全是,customJSON 只是直接编辑对象日期字段,然后返回编辑后的对象。然后将编辑的对象传递给res.json,它照常处理它。
    猜你喜欢
    • 2018-04-10
    • 2018-01-11
    • 2017-08-16
    • 1970-01-01
    • 2020-10-27
    • 2018-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多