如何在node-rest-client的POST方法中处理非JSON响应?
嘿,我之前用node-rest-client的时候也踩过这个坑!咱们来捋一捋:
你遇到的这个SyntaxError: Unexpected token P in JSON at position 0,本质原因是node-rest-client默认会把服务器返回的响应当成JSON去解析,但显然这次服务器返回的[PURGED]并不是有效的JSON格式(有效的JSON字符串得用双引号包裹,比如"[PURGED]",或者是标准的对象/数组结构),所以解析失败抛出了错误——哪怕请求本身已经完成了。
你猜的没错,自定义响应解析器就是解决这个问题的关键,具体实现很简单,分两种场景:
1. 全局配置自定义解析器(所有请求生效)
如果你大部分请求都不需要默认的JSON解析,可以在创建Client实例的时候直接指定全局的响应解析器:
const Client = require('node-rest-client').Client; // 自定义解析器:把响应Buffer转成字符串返回,不做JSON解析 const customParser = (data, response) => { // 这里可以根据需求调整,比如处理编码、判断响应类型等 return data.toString('utf8'); }; // 创建Client时配置响应解析器 const client = new Client({ responseConfig: { parser: customParser } });
2. 单个请求配置解析器(仅当前请求生效)
如果只是个别请求需要特殊处理,也可以在发起POST请求时单独指定:
client.post('https://your-target-api.com/endpoint', { data: { key: 'value' }, // 你的POST数据 headers: { "Content-Type": "application/json" }, responseParser: customParser // 这里指定自定义解析器 }, (data, response) => { // 现在data就是处理后的原始响应内容,不会再触发JSON解析错误了 console.log('处理后的响应:', data); console.log('响应状态码:', response.statusCode); });
进阶:兼容JSON和非JSON响应
如果服务器有时候返回JSON,有时候返回类似[PURGED]的非JSON内容,可以写一个更灵活的解析器,先尝试JSON解析,失败就返回原始字符串:
const flexibleParser = (data, response) => { const strData = data.toString('utf8'); try { // 尝试解析成JSON return JSON.parse(strData); } catch (err) { // 解析失败,返回原始字符串 return strData; } };
这样就能完美避免解析错误,同时兼容不同类型的响应啦!
内容的提问来源于stack exchange,提问作者Sugar
相关产品推荐
相关产品推荐

