Firebase Cloud Function如何返回自定义模型类而非JSON对象
可行性说明
完全可行。HTTP接口传输过程中最终都会将数据序列化为JSON字符串,你只需要在服务端侧输出和Person类字段完全匹配的结构,客户端拿到返回后按照Person模型反序列化即可得到对应的自定义模型对象。
实现步骤
1. 完善Person类
建议补充构造函数方便实例化,也可自定义toJSON方法控制序列化输出的字段,避免冗余字段返回:
class Person { stack: string; age: number; // 新增构造函数快速初始化属性 constructor(stack: string, age: number) { this.stack = stack; this.age = age; } // 可选:自定义序列化逻辑,确保仅输出Person类定义的字段 toJSON() { return { stack: this.stack, age: this.age } } }
2. 调整业务逻辑返回Person实例
将原来返回普通JSON对象的逻辑,替换为实例化Person对象后返回,response.json()方法会自动将类实例序列化为符合要求的JSON结构:
exports.getUserInfo = function (request, response) { cors(request, response, () => { new Promise((resolve, reject) => { let options = { uri: "www.example.com", headers: { "Accept": "application/json", "Access-Control-Allow-Headers": "Access-Control-Allow-Origin, Accept", } } requesting( options, function (error, res) { if (error !== null) { return reject({err: error}); } if (res.statusCode === 200) { console.log('body:', res.body); // 解析上游接口返回的JSON数据 const remoteData = JSON.parse(res.body); // 实例化Person对象 const person = new Person(remoteData.stack, remoteData.age); // 返回Person实例即可 return resolve(person); } }); }).then(r => { // json方法会自动序列化Person实例为对应结构的JSON response.status(200).json(r); }); }) }
注意事项
- 服务端不会直接传输类实例对象,所有数据都会转为JSON字符串传输,客户端侧需要自行按照Person类的定义将返回的JSON反序列化为类实例即可完成模型对接。
- 若上游接口返回的字段可能存在缺失,建议增加字段校验逻辑,避免生成不符合预期的Person实例。
内容的提问来源于stack exchange,提问作者Sandeep
相关产品推荐
相关产品推荐

