如何使用Express回调在节点中写入文件

时间:2018-01-09 20:05:32

标签: javascript node.js express fs

我正在尝试将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)throw err;
  错误:ENOENT:没有这样的文件或目录,打开'C:... \ test-folder \ test.txt'

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

1 个答案:

答案 0 :(得分:2)

你必须像这样调用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();
        })

    })

}