【发布时间】:2018-09-23 00:17:55
【问题描述】:
我是 Node 的新手,所以要温柔。我正在为我的婚礼创建一个应用程序,它接收上传的宾客名单(Excel 文件格式)并将其转换为 JSON 数组,然后我可以使用该数组来构建每位宾客的个人资料(饮食要求、rsvp 答案等)。
到目前为止,我的主页上有一个表单,允许用户上传 .xlsx 文件,当提交表单时,用户会再次重定向回主页。
我创建了以下路线:
router.post('/',
guestsController.upload,
guestsController.getGuestlist,
guestsController.displayGuestlist
);
这是我的客人控制器:
const multer = require('multer');
const convertExcel = require('excel-as-json').processFile;
const storage = multer.diskStorage({ //multers disk storage settings
destination: function (req, file, cb) {
cb(null, './uploads/')
},
filename: function (req, file, cb) {
var datetimestamp = Date.now();
cb(null, file.fieldname + '-' + datetimestamp + '.' + file.originalname.split('.')[file.originalname.split('.').length -1])
}
});
exports.upload = multer({storage: storage}).single('file');
exports.getGuestlist = async (req, res, next) => {
try {
await convertExcel(req.file.path, null, null, (err, guestData) => {
req.guestlist = guestData.map((guestObj) => Object.values(guestObj)[0]);
});
console.log(req.guestlist);
next();
} catch (e){
res.json({error_code:1,err_desc:"Corrupted Excel file"});
next();
}
};
exports.displayGuestlist = (req, res) => {
console.log(req.guestlist);
};
目前由于函数的同步特性,displayGuestlist 正在将 undefined 返回到控制台,因为covertExcel 尚未完成抓取数据。你可以看到我已经尝试使用新的 async await 语法来解决这个问题,但不幸的是它没有修复它。
我还尝试将 displayGuestlist 中的日志放在超时函数中,这已证明这纯粹是一个时间问题。
任何帮助者将不胜感激。
【问题讨论】:
标签: javascript node.js express async-await