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

Javascript 检查文件是否存在时避免while循环,javascript,node.js,file,asynchronous,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

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

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的本质。所以我的问题是,有更好的方法吗?

你可以通过制作来尝试。看看fs api,有一个fs watcher: