包含%的网址无法访问api

Hi trying to get a signUrl from S3, for some reason making the call with % isn't parse correctly by my code. I get a 404 not found.

This is the ajax request:

https://stage.musicmarkers.com/website/api/admin/get-signed-url/thumbnail/magazine%2F2BE.gif/image%2Fgif

My API:

app.get('/website/api/admin/get-signed-url/thumbnail/:key/:type', auth.getMember, directives.noCache, getThumbnailSingedUrl);

My function:

function getThumbnailSingedUrl(req, res) {

    if (!isAdmin(req, res)) {
        return;
    }

    var key = req.params.key || '';
    var type = req.params.type || '';

    ThumbnailBucketFacade.getSignedUrl(
        'putObject',
        key,
        type,
        function onGotSignedUrl(error, result) {
            if (error) {
                RestResponse.serverError(res, error);
            } else {
                RestResponse.ok(res, result);
            }
        }
    );
}

Making the call in a dev environment works.

Making the call without % environment works.

Same code exactly in a different project works.

Any ideas?

I believe what you have is encoded URI. So you need to decode it before using it:

const key = req.params.key && decodeURIComponent(req.params.key) || '';
const type = req.params.type && decodeURIComponent(req.params.type) || '';

More on decoreURIComponent here.

This is also backward compatible, so you don't have to worry that a plain string will get mangled.

So eventually it was a configuration issue at 'nginx', the 'nginx' router

was configured to add '/' at the end of the site name. That made all the

other slashes scrambled and ultimately to the call not to be recognise.

Thank's for those helping.