Nodejs中后台模拟FormData提交,出现source.on is not a function的错误
事情是这样的,前端时候,需要写一个程序,程序要求是后台使用FormData模拟前端表单提交,这个时候就出现了一个很奇怪的错误source.on is not a function,苦苦思索而不得其错误原因,于是我就仔细研究了下代码,才发现这个错误原因。
代码如下:
const item = await Item.findOne();
const id = item._id;
const obj = {
SHOP_ID: cShopID,
ORDER_ID: id,
ORDER_ITEM: cOrderItem,
AMOUNT: nAmount,
CHECK_CODE: md5token,
PROD_ID: cProdID,
CURRENCY: cCurrency,
}
let form = new FormData();
let keys = Object.keys(obj);
keys.forEach(key => {
form.append(key, obj[key])
});
在你大略浏览这个代码之后,没发现什么值得注意的问题,但是如果仔细一看就发现一个问题,ORDER_ID: id,这里的id是读取的mongodb中的ObjectId,也就是类似于6066ebd0e4e3cf0aac0c58f2,这里它不会转换成字符串,于是这里会被认为是一个stream,于是就发生了source.on is not a function的错误,解决方案也非常简单,就是将id转换为字符串:
const obj = {
SHOP_ID: cShopID,
ORDER_ID: id + '',
ORDER_ITEM: cOrderItem,
AMOUNT: nAmount,
CHECK_CODE: md5token,
PROD_ID: cProdID,
CURRENCY: cCurrency,
}
就这样即可解决这个问题,我已经遇见过两次这个问题,这次遇见的时候又忘记了,所以就写一篇博文记录一下。