node.js - lwip.open 在 mongoose findOne 之后不起作用

标签 node.js mongodb express mongoose multer

所以我有 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);
    }
});

你能帮我弄清楚这里的问题是什么吗?

最佳答案

它们都是异步函数。您如何保证在函数退出之前完成这两项操作?我建议使用像 Bluebird 这样的 promise 库。有了它,您可以同时运行多个异步函数,并指定当它们都返回时会发生什么。

不要忘记“ promise ”任何您希望将其视为 promise 的库。您的代码将类似于:

我的路线('等等',功能(){ return Promise.all([ myfunct1, myfunct2], (retval) => { return {f1val: retval[1], f2val: retval[2]}})

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

关于node.js - lwip.open 在 mongoose findOne 之后不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37366317/

相关文章:

javascript - 如何暂时禁用javascript中的log4js登录?

javascript - 如何使用http 2实现cookie jar

Node.js + Passport.js 无法验证不同的客户端,除非由同一应用程序提供服务

mongodb - MongoDB中的有向无环图设计模式

express - 当有多个套件时 Jest 不显示文本

node.js - NodeJS 的 OData

python-3.x - PyMongo [SSL : CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate

java - 计算 2 小时时间间隔内的平均值的最有效方法是什么

javascript - 如何在 express(node.js) 中获取路径变量

javascript - 如何将创建的 PDF 文件中的 base64 字符串发送给客户端?