所以我有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');v
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, './publichttp://img.558idc.com/uploadfile/') }, 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库.有了它,您可以同时运行多个异步函数,并指定它们返回时会发生什么.不要忘记’promisify’任何你想要作为承诺使用的库.你的代码看起来像:
我的路线(‘blah’,function(){
return Promise.all([myfunct1,myfunct2],(retval)=> {return {f1val:retval [1],f2val:retval [2]}})
我知道有些问题会出现并接受我的回答并为你写出代码,这样你所要做的就是复制粘贴它,但我真的希望你花时间学习为什么以及它是如何工作的你还不知道.