POST 请求 fs.fileWrite 到 json 文件不起作用,拒绝连接到本地主机

问题描述 投票:0回答:1

我目前不太擅长快递。我正在努力使帖子请求发挥作用。我希望发布请求使用 Node js 的 fs.fileRead 和 fs.fileWrite 将项目添加到 cart.json 文件中。由于某种原因,这些更改没有出现在 console.log 中,并且在浏览器中出现此错误:

browser localhost error screenshot

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;

        
    }

})

如果您对可能发生的事情有任何建议,请告诉我。

谢谢你

node.js json express post node.js-fs
1个回答
0
投票

你在这里犯了一些小错误:

首先,你不应该像这样使用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) => {});
});

希望对你有帮助:)

© www.soinside.com 2019 - 2024. All rights reserved.