使用异步方法,但Express仍返回503(NodeJS)

时间:2018-09-02 19:02:22

标签: express asynchronous networking

我正在使用Express后端在NodeJS中开发Web应用程序。该应用程序运行平稳,只是当用户注册时,在后端调用了一个稍长的操作,该操作涉及保存到数据库,调整图像大小等。此过程需要几秒钟才能完成,在此期间如果向服务器发出请求的其他任何人都将收到503错误,并且无论发送或接收数据都将无法执行任何操作。我正在使用异步函数来完成整个过程。我使用multer读取文件,使用fs读取和写入文件,并使用Jimp调整图像大小。代码如下所示。

module.exports = function(router) {
router.route('/')
    .post(function(req, res, next) {
        upload(req, res, function(err) {
            var salt = bcrypt.genSaltSync(saltRounds);
            var identifier = makeIdentifier(req.body.first_name.trim())
            let emailNotifications = 0;
            if (req.body.email_notifications === 'true') {
                emailNotifications = 1;
            }
            var signup = {
                identifier: identifier,
                first_name: toTitleCase(req.body.first_name.trim()),
                last_name: req.body.last_name.trim(),
                hobby: req.body.hobby,
                type: 'user',
                email: req.body.email.trim(),
                email_notifications: emailNotifications,
                password: bcrypt.hashSync(req.body.password, salt)
            };

            let ascii = /^[ -~]+$/;

            for (var propertyName in signup) {
                if (!ascii.test(signup[propertyName])) {
                    res.json({
                        reason: "invalid-characters"
                    });
                    return;
                }
            }
            if (req.file.size > 5000000) {
                res.json({
                    reason: "file-size"
                });
                return;
            }
            let emailExists = false;
            db.doesEmailExist(req.body.email, function(err, results) {
                if (err) {
                    res.status(500).send("Server error");
                    return;
                } else {
                    if (results.length > 0) {
                        res.json({
                            reason: "email-exists"
                        });
                        return;
                    } else {
                        fs.readFile(req.file.path, function(err, data) {
                            let newPath = __dirname + "/profile-pictures/" + identifier + ".png";
                            fs.writeFile(newPath, data, function(err) {
                                if (err) {
                                    console.log(err);
                                } else {
                                    try {
                                        Jimp.read(newPath, (err, file) => {
                                            if (err) throw err;
                                            file
                                                .resize(300, 300) // resize
                                                .quality(60) // set JPEG quality
                                                .write(newPath); // save
                                        });
                                    } catch (error) {
                                        res.json({
                                            reason: "image-properties"
                                        });
                                        return
                                    }
                                }
                            });
                        });
                        db.signup(signup, function(err, results) {
                            if (err) {
                                res.status(500).send("Server error");
                                return;
                            } else {
                                res.json({
                                    success: true
                                });
                                return;
                            }
                        })
                    }
                }
            })
        })
    });
}

是什么导致服务器响应503错误?任何帮助将不胜感激,谢谢!

0 个答案:

没有答案