我正在从事任务管理项目。我有一个问题。 因此,让中间件
/**
* 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)这样的库吗?还是有更好的做法?任何帮助表示赞赏。 谢谢。