检查文件是否存在时避免while循环

时间:2015-10-16 11:06:48

标签: javascript node.js file asynchronous

我有一个节点应用程序,它读取上传的文件,如下所示:

router.route('/moduleUpload')
    .post(function (request, response) {
        request.files.file.originalname = request.files.file.originalname.replace(/ +?/g, '');
        var media = new Media(request.files.file, './user_resources/module/' + request.body.module_id + '/');
        if (!fs.existsSync(media.targetDir)) {
            fs.mkdirSync(media.targetDir, 0777, function (err) {
                if (err) {
                    console.log(err);
                    response.send("ERROR! Can't make the directory! \n");    // echo the result back
                }
            });
            fs.chmodSync(media.targetDir, 0777);

        }
        moveFile(media);
        var token = jwt.encode({
            mediaObject: media
        }, require('../secret')());
        response.status(200).json(token);

    });

现在,当上传此文件并收到状态码200时,我的系统会调用以下路径:

router.route('/resourcePath/:encodedString')
    .all(function (req, res) {
        var decoded = jwt.decode(req.params.encodedString, require('../secret')());
        var mediaObject = decoded.mediaObject;
        var ext = mediaObject.file.originalname.substr(mediaObject.file.originalname.lastIndexOf('.'));
        var path = 'app_server' + mediaObject.targetDir.substring(1) + mediaObject.fileName + ext;
        var fileExist = false;


        res.status(200).send(path)
    });

现在出于某种原因,在文件正确到位之前调用此调用会导致有时我的用户无法看到内容。

要确保文件位于文件夹中,我想到要添加的以下代码:

            var fileExist = false;

        while (!fileExist) {
            if (fs.existsSync('/var/www/learningbankapp/'+path)) {
                fileExist = true;
            }
        }

但是我不确定这是一个很好的解决方案,因为它违背了node.js的性质。所以我的问题是,有没有更好的方法呢?

0 个答案:

没有答案