Node.js使用netsuite-rest模块调用NetSuite接口报400请求体无效如何解决?
报错原因
netsuite-rest库的request方法接收的body参数需要是JavaScript对象类型,你当前传入的是手动拼接的JSON字符串,库会自动对传入的body做JSON序列化,字符串会被二次转义,最终发送的请求体格式不符合要求。- 你手动拼接的JSON中,SQL语句包含未转义的换行符,本身就是非法JSON格式,服务端无法正常解析。
- 额外排查:你SQL中查询的
accounts是NetSuite的会计科目表,不存在companyName字段,如果你实际要查询客户数据,表名应为customer,字段不匹配也会触发无效内容报错。
修复方案
- 调整body参数格式,直接传入JS对象,不要手动拼接JSON字符串,由库自动完成序列化。
- 显式添加
Content-Type: application/json请求头,确保服务端按JSON格式解析请求体。 - 核对SQL语法、表名、字段名是否符合NetSuite SuiteQL的规范。
修复后的完整代码如下:
var dotenv = require("dotenv"); dotenv.config(); console.log('Token', process.env.token); console.log('Token Secret', process.env.token_secret); var NsApiWrapper = require('netsuite-rest'); NsApi = new NsApiWrapper({ consumer_key: process.env.consumer_key, consumer_secret_key: process.env.consumer_secret_key, token: process.env.token, token_secret: process.env.token_secret, base_url: "https://xxxx.suitetalk.api.netsuite.com", realm: process.env.realm, }); NsApi.request({ path: 'query/v1/suiteql?limit=5', method: "POST", headers: { "Content-Type": "application/json" }, body: { "q": `SELECT id, companyName, email, dateCreated FROM customer` } }) .then(response => console.log(response)) .catch((err) => console.log(err));
内容的提问来源于stack exchange,提问作者user6437920
相关产品推荐
相关产品推荐

