Node.js 中涉及 fs.writeFile() 的两段代码之间的差异

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

我正在尝试使用 Node 和 Express 为 RESTful API 声明一个

POST
方法。我需要接受请求正文并将其写入用于存储用户数据的 JSON 文件。我正在使用
fs
模块来修改 JSON 文件。

我编写了相同的代码,但在声明 return 语句时略有不同。

方法1-

app.post('/api/users', (req, res) => {
    const body = req.body;
    users.push(body)
    fs.writeFile("./users.json", JSON.stringify(users), (err) => {
        if (err) {
            console.log(err)
        }
        return res.json({ status: 'success', data: body });
    })
})

方法2-

app.post('/api/users', (req, res) => {
    const body = req.body;
    users.push(body)
    fs.writeFile("./users.json", JSON.stringify(users), (err) => {
        if (err) {
            console.log(err)
        }
    })
    return res.json({ status: 'success', data: body });
})

据我了解,方法 1 中的 return 语句适用于

callback
方法
fs
writeFile
fn 参数。而方法 2 中的 return 语句是为
request handler
方法的
POST
fn 显式定义的。并且
res.send()
与 req 一起使用。处理程序 fn。

这两种方法有什么区别吗?哪一种是正确的方法?它们本质上执行相同的功能吗?

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

fs.writeFile
是异步的。因此,方法之间的主要区别在于,

  • 方法1等待文件写入操作完成后再发送响应。
  • 方法2立即发送响应,无论文件写入操作是否完成。

方法 1 更安全,但可能更慢。

在方法 1 或方法 2 中使用

return
语句并不重要。两者都:
fs.writeFile
回调,而express请求处理程序忽略返回值。

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