【问题标题】:lwip.open doesn't work after mongoose findOne猫鼬 findOne 后 lwip.open 不起作用
【发布时间】:2016-09-18 21:03:45
【问题描述】:

所以我有 mongoose、multer 和 lwip(从顶部需要它们)。

var express = require('express');
var router = express.Router();
var mongoose = require('mongoose');
var jwt = require('jsonwebtoken');
var Users = require('../models/users.js');
var multer = require('multer');
var mime = require('mime');
var lwip = require('lwip');

如果我评论 Users.findOne 部分,图像将被裁剪,因为我希望它被裁剪。但是,如果我取消注释它,lwip 部分将停止工作,但不会引发任何错误。它只是不输入lwip.open()

router.post('/image', upload.single('file'), function (req, res) {  

    //This part works always.
    Users.findOne({userid: req.body.userid}, function (err, user) {  
        var imgpath = req.file.path.split("public\\")[1];  
         user.user_photos.push(imgpath);  
         user.save(function (err) {  
             if (err)  
                 console.log('error');  
             else  
                 console.log('success');  
         });  
     });  

     //If I remove the top part, this part will work too.
     lwip.open(req.file.path, function(err, image){  
         image.batch()  
             .crop(200,200)  
             .writeFile(req.file.path, function(err) {  
                 if (err)  
                     console.log('error');  
                 else  
                     console.log('success');  
             });  
     }); 
});   

你可能也需要我的 multer 配置,所以这里是:

var storage = multer.diskStorage({
    destination: function (req, file, cb) {
        cb(null, './public/uploads/')
    },
    filename: function (req, file, cb) {
        var extension;
        if (mime.extension(file.mimetype) == "jpeg") {
            extension = "jpg";
        }
        else {
            extension = mime.extension(file.mimetype);
        }

        cb(null, file.fieldname + '-' + Date.now() + '.' + extension);
    }
});

你能帮我找出问题所在吗?

【问题讨论】:

    标签: node.js mongodb express mongoose multer


    【解决方案1】:

    它们都是异步函数。你怎么能保证在函数退出之前两者都完成?我推荐使用像 Bluebird 这样的 promise 库。有了它,您可以同时运行多个异步函数,并指定它们都返回时会发生什么。

    不要忘记“承诺”任何您希望将其视为承诺的已使用库。你的代码看起来像:

    我的路线('废话',函数(){ return Promise.all([ myfunct1, myfunct2], (retval) => { return {f1val: retval[1], f2val: retval[2]}})

    我知道会有一些混蛋来接受我的回答并为你写出代码,这样你所要做的就是复制粘贴它,但我真的希望你花时间学习为什么和如何如果您还不知道,它会起作用。

    【讨论】:

    • 我在这里尝试使用 Promise,但不知道我应该使用库...谢谢...
    • 没问题!很高兴有帮助。如果最终使用 Promise 并发布有关 Promise 如何工作的其他问题,请随时在您的帖子下方的评论中提及我,我会给您指点。祝你好运!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-16
    • 2019-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-18
    相关资源
    最近更新 更多