【发布时间】:2022-01-07 11:49:49
【问题描述】:
无法将信息发送到后端。目前,我的前端有以下fetch 函数:
function appending() {
console.log('in Appending');
console.log('formInfo', formInfo);
console.log('formInfofrom', formInfo.from)
fetch('http://localhost:3001/add-transaction', {
method: 'POST',
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
},
body: {
from: formInfo.from,
to: formInfo.to,
amount: formInfo.amount,
fee: formInfo.fee
}
}).then((backendResponse) => {
if(backendResponse.ok)
return backendResponse.json();
}).then((theJSON) => {
// ERROR: 1 - not enough funds
// ERROR: 0 - no errors
console.log('theJSON: ', theJSON);
console.log('Error is: ', theJSON.error);
if(theJSON.error === 1) {
console.log('Insufficient')
setBackendError("insufficient");
}
else if (theJSON.error === 0) {
console.log("Sufficient funds")
setBackendError("sufficient")
}
else {
console.log("Mongo error")
setBackendError("mongo");
}
}).catch((error) => {
console.log('error is', error);
})
}
formInfo 是一个 JSON 对象,它有 4 个键/值对,from 键、to 键、amount 和 fee:
const formInfo = { "from": "", "to": "", "amount": "", "fee":"" };
发送交易后检查控制台时,我看到以下内容:
这告诉我它是有效的。但是,当我检查后端时,我在控制台中看到 req.body.from 的结果为 undefined:
这条路线的代码如下:
app.post('/add-transaction', (req, res) => {
console.log('requestFrom', req.body.from);
blockModel.find({ $or: [{ from: req.body.from }, { to: req.body.from }, { miner: req.body.from }] }).then((blocks) => {
if (!blocks.length) {
yakhicoin.addBlock(new Block("system", req.body.from, 1000, 0, "null", 0));
const newblock = new blockModel(yakhicoin.getLatestBlock());
newblock.save();
}
let balance = 0;
for (const block of blocks) {
if (block.from == req.body.from) {balance -= (block.amount + block.fee);}
if (block.to == req.body.from) {balance += block.amount;}
if (block.miner == req.body.from) {balance += (block.fee + block.reward);}
}
if (req.body.amount <= balance || (!blocks.length && req.body.amount <= 1000)) {
const formData = {
"from": req.body.from,
"to": req.body.to,
"amount": req.body.amount,
"fee": req.body.fee
}
const newtransaction = new transactionModel(formData);
newtransaction
.save() // Promise
.then( //resolved...
(success) => {
res.send({"transaction" : success, "error" : 0});
}
)
.catch( //rejected...
(error) => {
res.send({"error" : error});
}
);
}
else
res.json({"error" : 1})
})
})
带有以下标题:
无论我多久检查一次,我都看不出为什么会发生此错误。为什么formInfo 在发送前就存在时,突然被接收为未定义?我还启用了cors()。任何帮助表示赞赏!
【问题讨论】:
-
您应该使用开发工具中的“网络”选项卡来调试请求,而不是“控制台”选项卡。如果“网络”选项卡中的请求与邮递员中的请求匹配,您应该会看到相同的行为服务器端。
-
您好!我刚刚检查了网络选项卡,它说有效负载有
[object Object]:,知道如何处理这个吗? imgur.com/LsmPz4q -
检查浏览器请求中的“content-type”标头。确保它与邮递员中的内容相匹配。
-
你好,我做到了,但还是不行:(
-
请以文字形式提供所有代码、错误、数据等,而不是文字图片。请参阅 How to Ask,其中写道:“请勿发布代码、数据、错误消息等的图片。 - 将文本复制或输入到问题中。”
标签: javascript reactjs postman