我有一个简单的REST应用程序,我想读取目录中的文件并将它们发送回前端。我使用的代码是:
const fs = Promise.promisifyAll(require('fs'))
const router = require('express').Router()
router.get('/list', async (req, res, next) => {
const files = await fs.readdirAsync('presentations')
res.json(files)
})
问题是:我的前端收到了“承诺”,但是如果我尝试调试它会告诉我files
是一个数组。
我尝试过不要使用async / await语法:
router.get('/list', (req, res, next) => {
fs.readdirAsync('presentations')
.then(files => {
res.json(files)
})
})
但结果是一样的:前端仍然得到Promise
。
UPD:问题在于前端axios
实例。它没有解决承诺,因此结果await
解决了问题。
答案 0 :(得分:0)
所以,有三个部分。阅读,存储和发送。
这里是阅读部分:
var fs = require('fs');
function readFiles(dirname, onFileContent, onError) {
fs.readdir(dirname, function(err, filenames) {
if (err) {
onError(err);
return;
}
onFileContent(filename);
});
});
});
}
这是存储部分:
var data = {};
readFiles('dirname/', function(filename) {
data[filename] = filname;
}, function(err) {
throw err;
});
发送部分取决于您。您可能希望逐个发送或在阅读完成后发送它们。
如果要在读取完成后发送文件,则应使用fs函数的同步版本或使用promises。异步回调不是一种好的风格。