Node.js 根据节点的请求提供调整大小的图像时出现问题

Node.js 根据节点的请求提供调整大小的图像时出现问题,node.js,caching,image-processing,express,sails.js,Node.js,Caching,Image Processing,Express,Sails.js,我正在使用sailsjs,网站是sailsjs.org Im尝试创建一个控制器函数,以便在请求图像时,可以在访问者第一次请求图像时调整图像大小并将其缓存,然后在访问者下一次请求图像时从缓存中检索图像 我已设置到资产控制器的路由: 'get /image/:width/:height/:image': { controller: 'AssetController', action: 'image' }, 我已经设置了一个策略来拦截来自上述路由的图像请求,并将文件调整大小/保存到缓

我正在使用sailsjs,网站是sailsjs.org

Im尝试创建一个控制器函数,以便在请求图像时,可以在访问者第一次请求图像时调整图像大小并将其缓存,然后在访问者下一次请求图像时从缓存中检索图像

我已设置到资产控制器的路由:

'get /image/:width/:height/:image': {
    controller: 'AssetController',
    action: 'image'
},
我已经设置了一个策略来拦截来自上述路由的图像请求,并将文件调整大小/保存到缓存中:

var fs = require('fs'),
im = require('imagemagick');

module.exports = function imageCacheResize(req, res, next){
    var width = req.param('width');
    var height = req.param('height');
    var file = req.param('image');

    if(width && height){

        //read from cache
        dir = 'assets/images/uploads/cache/'+width+'X'+height+'/';
        filename = dir+file;
        if (!fs.existsSync(dir)){
            fs.mkdirSync(dir);
        }
        if(!fs.exists(filename)){
            //write to file if not exist
            var originalFile = 'assets/images/uploads/'+file;

            im.resize({
                srcPath: originalFile,
                dstPath: filename,
                width:   width
            }, function(err, stdout, stderr){
                if (err) throw err;
            });
        }
    }
    next();
};
我还为控制器设置了操作/功能,以处理返回调整大小的图像:

image: function(req, res){
    var file = req.param('image');
    var filename = 'assets/images/uploads/'+file;

    if((typeof req.param('width') != 'undefined')
        &&(typeof req.param('height') != 'undefined'))
    {
        var width = req.param('width');
        var height = req.param('height');
    }
    if(typeof req.param('size') != 'undefined'){
        var size = req.param('size');
    }

    if(width && height){


        //read from cache
        dir = 'assets/images/uploads/cache/'+width+'X'+height+'/';
        file = dir+file;
    }else{
        file = 'assets/images/uploads/'+file;
    }
    console.log(file);
    res.sendfile(file);
}

所有代码都能正常工作,创建并保存调整大小的图像,但是它不会在第一次请求时返回图像,而是在第二次请求时返回图像。

因此,我没有将next()命令放在正确的位置。似乎在等待图像调整大小时,代码继续并点击最终的next()

我已将图像大小调整策略更改为:

var fs = require('fs'),
im = require('imagemagick');

module.exports = function imageCacheResize(req, res, next){
var width = req.param('width');
var height = req.param('height');
var file = req.param('image');

if(width && height){

    //read from cache
    dir = 'assets/images/uploads/cache/'+width+'X'+height+'/';
    filename = dir+file;
    if (!fs.existsSync(dir)){
        fs.mkdirSync(dir);
    }
    if(!fs.exists(filename)){
        //write to file if not exist
        var originalFile = 'assets/images/uploads/'+file;

        im.resize({
            srcPath: originalFile,
            dstPath: filename,
            width:   width
        }, function(err, stdout, stderr){
            if (err) throw err;
            next();
        });
    }else{
        next();
    }
}else{
    next();
}
};