diff --git a/lib/middleware/onerror.js b/lib/middleware/onerror.js index 04c9c4c9f..a29f59b7a 100644 --- a/lib/middleware/onerror.js +++ b/lib/middleware/onerror.js @@ -39,6 +39,10 @@ module.exports = async (ctx, next) => { }); } } catch (err) { + // Append v2 route path + ctx.request.path = (ctx.mountPath ?? '') + ctx.request.path; + ctx._matchedRoute = ctx._matchedRoute ? (ctx.mountPath ?? '') + ctx._matchedRoute : ctx.request.path; + let message = err; if (err.name && (err.name === 'HTTPError' || err.name === 'RequestError')) { message = `${err.message}: target website might be blocking our access, you can host your own RSSHub instance for a better usability.`; diff --git a/test/middleware/onerror.js b/test/middleware/onerror.js index 562ebed16..f2ca60048 100644 --- a/test/middleware/onerror.js +++ b/test/middleware/onerror.js @@ -6,6 +6,7 @@ jest.mock('request-promise-native'); const server = require('../../lib/index'); const config = require('../../lib/config').value; const request = supertest(server); +const cheerio = require('cheerio'); afterAll(() => { server.close(); @@ -42,3 +43,34 @@ describe('RequestInProgressError', () => { expect(responses.filter((r) => r.text.includes('This path is currently fetching, please come back later!'))).toHaveLength(1); }); }); + +describe('v2 route throws an error', () => { + it('v2 route path error should have path mounted', async () => { + await request.get('/test/error'); + await request.get('/thisDoesNotExist'); + const response = await request.get('/'); + + const $ = cheerio.load(response.text); + $('.debug-item').each((index, item) => { + const key = $(item).find('.debug-key').text().trim(); + const value = $(item).find('.debug-value').html().trim(); + switch (key) { + case 'Request Amount:': + expect(value).toBe('7'); + break; + case 'Hot Routes:': + expect(value).toBe('4 /test/:id
1 /test/slow
1 /thisDoesNotExist
'); + break; + case 'Hot Paths:': + expect(value).toBe('2 /test/error
2 /test/slow
1 /test/httperror
1 /thisDoesNotExist
1 /
'); + break; + case 'Hot Error Routes:': + expect(value).toBe('3 /test/:id
1 /test/slow
1 /thisDoesNotExist
'); + break; + case 'Hot Error Paths:': + expect(value).toBe('2 /test/error
1 /test/httperror
1 /test/slow
1 /thisDoesNotExist
'); + break; + } + }); + }); +});