我目前不太擅长快递。我正在努力使帖子请求发挥作用。我希望发布请求使用 Node js 的 fs.fileRead 和 fs.fileWrite 将项目添加到 cart.json 文件中。由于某种原因,这些更改没有出现在 console.log 中,并且在浏览器中出现此错误:
post 请求表单的端点看起来非常不同:
app.get('/merch/:product_name', (req, res) => {
...
}
这是post请求的代码:
app.post('/cart', (req, res) => {
const { branch, product_name, category, style, flavor, quantity } = req.body;
const newCartItem = {
id: uuid(),
branch,
product_name,
category,
style,
quantity
}
const readFile = async () => {
const fileContent = await new Promise((resolve, reject) => {
return fs.readFile(__dirname + "/data/cart.json", 'utf-8', (err, data) => {
if (err) {
title = "Error"
res.render('/error', { title, err })
} else if (data) {
const fileData = JSON.parse(data)
if (branch === 'frozen-treats') {
fileData['frozen_treats'] = [...fileData.frozen_treats, newCartItem];
} else if (branch === 'merch') {
fileData['merch'] = [...fileData.merch, newCartItem];
}
fs.writeFile(__dirname + "/data/cart.json", JSON.stringify(fileData, null, 2), 'utf-8', (err, data) => {
if (err) {
title = "Error";
console.log(err);
res.render('/error', { title, err });
} else if (data) {
resolve(data)
res.end(JSON.stringify(data, null, 2));
}
})
}
})
})
return fileContent;
}
})
如果您对可能发生的事情有任何建议,请告诉我。
谢谢你
你在这里犯了一些小错误:
首先,你不应该像这样使用promise:
const fileContent = await new Promise((resolve, reject) => {});
但是你可以这样写:
const fileContent = new Promise(await(resolve, reject) => {});
我将为您提供一些更改,看看也许会对您有所帮助:
app.post("/cart", (req, res) => {
const { branch, product_name, category, style, flavor, quantity } = req.body;
const newCartItem = {
id: uuid(),
branch,
product_name,
category,
style,
quantity
};
const readFile = () => {
return new Promise(async (resolve, reject) => {
await fs.readFile(__dirname + "/data/cart.json", "utf-8", async (err, data) => {
if (err) {
const title = "Error";
res.render("/error", { title, err });
reject(err);
}
const fileData = JSON.parse(data);
fileData[branch] = [];
fileData[branch].push(newCartItem);
await fs.writeFile(__dirname + "/data/cart.json", JSON.stringify(fileData, null, 2),"utf-8",(err, writeData) => {
if (err) {
const title = "Error";
res.render("/error", { title, err });
reject(err);
}
resolve(writeData);
res.end(JSON.stringify(writeData, null, 2));
}
);
});
});
};
readFile()
.then(() => {})
.catch((err) => {});
});
希望对你有帮助:)