这是代码片段。查询以json形式返回,但是如何将这些值写入JSON文件?如何使用node.js将res.json的结果写入正确的json文件?
app.get('/users', function(req, res) {
User.find({}, function(err, docs) {
res.json(docs);
console.error(err);
})
});
这是代码片段。查询以json形式返回,但是如何将这些值写入JSON文件?如何使用node.js将res.json的结果写入正确的json文件?
app.get('/users', function(req, res) {
User.find({}, function(err, docs) {
res.json(docs);
console.error(err);
})
});
使用节点的文件系统库'fs'。
const fs = require('fs');
const jsonData = { "Hello": "World" };
fs.writeFileSync('output.json', JSON.strigify(jsonData));
这个答案不会起作用,因为你不能直接写一个JS对象到一个文件,而没有先把它串起来。 – peteb
我已更新代码以使用JSON.stringify() –
如果你要来的路线回调处理程序中写入文件,你应该使用异步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)
})
})
您是否尝试过使用['fs'](https://nodejs.org/api/fs.html)? –