Node.js猫鼬响应转换

时间:2020-05-15 10:09:46

标签: node.js transform response middleware

我正在从事任务管理项目。我有一个问题。 因此,让中间件

/**
 * Middleware which transforms response body
 * @param {Object} req - Request
 * @param {Object} res - Response
 * @param {Function} next - Next middleware
 */
const transformer = (req, res, next) => {
    let body = res.response.body;

    const transformObj = (obj) => {
        if (typeof obj.transform === 'function') {
            return obj.transform();
        }
        return obj;
    }

    if (Array.isArray(body)) {
        body = body.map(obj => {
            return transformObj(obj);
        })
    } else {
        body = transformObj(body);
    }
    res.response.body = body;
    next();
};

在发送给客户端之前先转换响应的主体。假设我需要在用户的响应中排除密码,或者我不希望将_v:0或类似的其他信息发送给客户端。

这是猫鼬模式的例子。

const mongoose = require('./../mongoose');

const TasksSchema = new mongoose.Schema({
    title: {type: String, required: true},
    description: {type: String, required: true}
});

TasksSchema.methods.transform = function () {
    return {
        id: this._id,
        title: this.title,
        description: this.description
    }
}

module.exports = mongoose.model('Task', TasksSchema);

我唯一的问题是,我是否正在重新发明轮子?我的意思是有一个像JS的class-transformer(for TS)这样的库吗?还是有更好的做法?任何帮助表示赞赏。 谢谢。

0 个答案:

没有答案