【问题标题】:How to Write File in Node with Express Callback如何使用 Express 回调在节点中写入文件
【发布时间】:2018-06-18 22:37:42
【问题描述】:

我正在尝试将来自 API 端点的请求写入具有节点包 expressfile-system 的文件。但是,当我运行 writeFile 函数时,文件夹或 txt 文件都不会写入文件系统。

我已经检查了文件夹权限,它们似乎设置正确。此外,错误回调似乎在控制台日志中返回 null。

服务器代码

app.use((req, res, next) => {       // Enable Cross-Origin Resource Sharing (CORS)
  res.header("Access-Control-Allow-Origin", "*")
  res.header("Access-Control-Allow-Methods", "GET,HEAD,OPTIONS,POST,PUT")
  res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, content-type, Accept, Authorization, x-api-key")
  next()
})


app.post("/node/api/mssql/post-order-header", (req, res, next) => {
  if(valid) write.orderHeader(req, res)
})

模块代码

let fs = require("fs")

...

exports.orderHeader = (req, res, next) => {
  fs.writeFile('_log/receipts/test.txt', JSON.stringify(req.body), (err) => {
    if (err) throw err;
    console.log('The file has been saved!');
  })
})

错误

C:\...\fs\write_order.js:17
if (err) 抛出错误;
错误:ENOENT:没有这样的文件或目录,打开 'C:...\test-folder\test.txt'

这可能与Node有关吗? (每次都想新建一个文件)

【问题讨论】:

  • 尝试将writeFile 的参数更改为:'./test-folder/test.txt', JSON.stringify(req.body), 'utf8', err => console.log(err))
  • 为什么不直接使用原生的fs 模块呢?另外,如果你的模块在 node_modules 目录中,你应该只需要在不提供路径的情况下执行const fs = require('file-system')
  • 这应该是let fs = require('file-system'),但我认为这不会解决您的问题
  • Writing files in Node.js的可能重复
  • @m_callens 好的。试过这个。仍然没有写任何东西。

标签: javascript node.js express fs


【解决方案1】:

你必须像这样导入fs 模块:

const fs = require('fs');

fs.mkdir是异步的,你需要在回调函数内部调用fs.writeFile,并在写入文件之前使用JSON.stringify(res.body)对象。最后一件事,您似乎正在导出一个中间件,这就是为什么您应该通过添加 next 方法来完成中间件签名:

const fs = require('fs');

exports.orderHeader = (req, res, next) => {

    console.log(req.body)  // properly logs body

    fs.mkdir('test-folder', {mode: '777'}, (err) => {
        if (err) return next(err);

        fs.writeFile('test-folder/test.txt', JSON.stringify(req.body), (err) => {
            if (err) return next(err);

            next();
        })

    })
    
}

【讨论】:

  • 好的。 next 是做什么的?
  • 另外,这不起作用。有没有办法错误检查权限?
  • 它调用下一个中间件
  • 你是怎么调用这个函数的?
  • 不,我要你给我看一下调用orderHeader函数的代码
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-03-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-21
  • 1970-01-01
  • 2014-04-19
相关资源
最近更新 更多