微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 MERN 应用中实施后台作业的最佳方法是什么?

如何解决在 MERN 应用中实施后台作业的最佳方法是什么?

我制作了一个小型 MERN 应用程序,用户可以在其中上传图片,为此我使用了 multer。虽然它在开发中运行良好,但在部署到 heroku 后,每次我尝试上传图像时,都会收到 code=H12(Request timeout) 错误,并表示请求加载时间超过 3 秒。经过一番挖掘,我发现在给出此错误之前,heroku 的响应请求的时间限制为 3000 毫秒。 唯一的解决方案是将图片上传实现为后台作业,但我什至不知道从何开始,因为我以前从未这样做过。

实现图片上传作为后台作业的最佳方式是什么?任何建议或教程链接都会非常有帮助和赞赏。

图片上传路径文件

const router = require('express').Router();
const multer = require('multer');
const FILE_PATH = 'uploads';

const { uploadPhoto } = require('../controllers/photos/upload-photo');

const storage = multer.diskStorage({
    destination: (req,file,cb) => cb(null,FILE_PATH),filename: (req,cb) => {
        cb(null,`${Date.Now()}_${file.originalname}`)
    },fileFilter: (req,cb) => {
        if (!file.originalname.match(/\.(jpeg|jpg|png|JPG|PNG)$/)) {
            console.log('Only upload jpg and png files.');
        }

        cb(undefined,true);
    },});

router.post('/upload/:userid',multer({ storage }).single('photo'),uploadPhoto);

module.exports = router;

图片上传的控制器文件

const User = require('../../models/User');
const Photo = require('../../models/Photo');

exports.uploadPhoto = (req,res) => {
    //My approach with Multer

    const { file: { mimetype,filename,path },protocol } = req;
    const url = `${protocol}://${req.get('host')}`;

    User
        .findById(req.params.userid)
        .exec((error,user) => {
            if (error || !user) return res.status(404).json({ message: error.message,});

            const newPhoto = new Photo({
                photo: {
                    mimetype,photoUrl: `${url}/${path}`,name: filename,},owner: user._id,});

            newPhoto.save((error,photo) => {
                if (error) {
                    return res.status(404).json({ message: error.message,});
                }

                user.photos.push(newPhoto._id);
                user.save();

                return res.status(201).json({
                    message: `Image created`,photoUrl: photo.photoUrl,});
            });
        });
};

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。