所以我有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);
}
});
你能帮我弄清问题是什么吗?
答案 0 :(得分:1)
他们都是异步功能。如何在功能退出之前保证两者都完成?我建议使用像Bluebird这样的promise库。有了它,您可以同时运行多个异步函数,并指定它们返回时会发生什么。
不要忘记宣传'任何你想要作为承诺使用的库。你的代码看起来像是:
我的路线(' blah',function(){ return Promise.all([myfunct1,myfunct2],(retval)=> {return {f1val:retval [1],f2val:retval [2]}})
我知道有些问题会出现并接受我的回答并为你写出代码,这样你所要做的就是复制粘贴它,但我真的希望你花时间学习为什么和如何它可以工作,如果你还不知道。