我有一个简单的 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)
})
问题是:我的前端收到“Promise”,但如果我尝试调试,它会显示 files
是一个数组。
我尝试不使用这样的 async/await 语法:
router.get('/list', (req, res, next) => {
fs.readdirAsync('presentations')
.then(files => {
res.json(files)
})
})
但结果是一样的:前端仍然得到 Promise
。
UPD:问题出在前端 axios
实例上。它没有解决 promise ,因此等待
结果解决了问题。
最佳答案
所以,共有三个部分。读取、存储和发送。
这是阅读部分:
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 函数的同步版本或使用 Promise。异步回调不是一个好的风格。
关于node.js - Bluebird promise 解决快速路线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49046289/