事情是这样的,前端时候,需要写一个程序,程序要求是后台使用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,
}

就这样即可解决这个问题,我已经遇见过两次这个问题,这次遇见的时候又忘记了,所以就写一篇博文记录一下。