2017-04-10 25 views

回答

0

使用节点的文件系统库'fs'。

const fs = require('fs'); 

const jsonData = { "Hello": "World" }; 
fs.writeFileSync('output.json', JSON.strigify(jsonData)); 

文档:fs.writeFileSync(file, data[, options])

+0

这个答案不会起作用,因为你不能直接写一个JS对象到一个文件,而没有先把它串起来。 – peteb

+0

我已更新代码以使用JSON.stringify() –

1

如果你要来的路线回调处理程序中写入文件,你应该使用异步writeFile()功能或fs.createWriteStream()功能,是fs模块中的一部分Node.js核心API。如果没有,您的服务器将对任何后续请求没有响应,因为Node.js线程在写入文件系统时将被阻塞。

以下是路由回调处理程序中writeFile的示例用法。每次调用路由时,此代码将覆盖./docs.json文件。

const fs = require('fs') 
const filepath = './docs.json' 

app.get('/users', (req, res) => { 
    Users.find({}, (err, docs) => { 
     if (err) 
     return res.sendStatus(500) 

     fs.writeFile(filepath, JSON.stringify(docs, null, 2), err => { 
     if (err) 
      return res.sendStatus(500) 

     return res.json(docs) 
     }) 
    }) 
}) 

以下是将您的JSON编写为包含Streams的文件的示例用法。 fs.createReadStream()用于创建可串联的对象的可读流。然后,将Readable写入带有可读数据的可写入流的文件路径中。

const fs = require('fs') 

app.get('/users', (req, res) => { 
    Users.find({}, (err, docs) => { 
     if (err) 
     return res.sendStatus(500) 

     let reader = fs.createReadStream(JSON.stringify(docs, null, 2)) 
     let writer = fs.createWriteStream(filename) 

     reader.on('error', err => { 
     // an error occurred while reading 
     writer.end() // explicitly close writer 
     return res.sendStatus(500) 
     }) 

     write.on('error', err => { 
     // an error occurred writing 
     return res.sendStatus(500) 
     }) 

     write.on('close',() => { 
     // writer is done writing the file contents, respond to requester 
     return res.json(docs) 
     }) 

     // pipe the data from reader to writer 
     reader.pipe(writer) 
    }) 
}) 
+0

传递JSON的字符串版本。想知道downvote,因为此答案没有任何问题。 – peteb

+0

我没有downvote,但我想知道在可读流中的错误是否会触发文件编写器流的泄漏,如[在此解释](https://nodejs.org/api/stream.html#stream_readable_pipe_destination_options)所述: “一个重要的警告是,如果可读流在处理期间发出错误,则可写目的地不会自动关闭。如果发生错误,则需要手动关闭每个流以防止内存泄漏。” –

+0

@ E_net4在阅读过程中发生错误时添加了写入器的明确关闭。 – peteb