如何解决在 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 举报,一经查实,本站将立刻删除。