mirror of
https://github.com/withastro/astro.git
synced 2025-04-07 23:41:43 -05:00
fix(routing): trailingSlash on endpoints (#9597)
* fix(routing): applies trailingSlash on endpoints * add changeset * add test * Update .changeset/funny-lobsters-promise.md Co-authored-by: Arsh <69170106+lilnasy@users.noreply.github.com> --------- Co-authored-by: Emanuele Stoppa <my.burning@gmail.com>
This commit is contained in:
parent
2814984ab9
commit
9fd24a546c
3 changed files with 65 additions and 1 deletions
5
.changeset/funny-lobsters-promise.md
Normal file
5
.changeset/funny-lobsters-promise.md
Normal file
|
@ -0,0 +1,5 @@
|
|||
---
|
||||
"astro": patch
|
||||
---
|
||||
|
||||
Fixes an issue where configuring trailingSlash had no effect on API routes.
|
|
@ -328,7 +328,7 @@ export function createRouteManifest(
|
|||
} else {
|
||||
components.push(item.file);
|
||||
const component = item.file;
|
||||
const trailingSlash = item.isPage ? settings.config.trailingSlash : 'never';
|
||||
const { trailingSlash } = settings.config;
|
||||
const pattern = getPattern(segments, settings.config, trailingSlash);
|
||||
const generate = getRouteGenerator(segments, trailingSlash);
|
||||
const pathname = segments.every((segment) => segment.length === 1 && !segment[0].dynamic)
|
||||
|
|
59
packages/astro/test/units/routing/trailing-slash.test.js
Normal file
59
packages/astro/test/units/routing/trailing-slash.test.js
Normal file
|
@ -0,0 +1,59 @@
|
|||
import {
|
||||
createBasicSettings,
|
||||
createFs,
|
||||
createRequestAndResponse,
|
||||
defaultLogger,
|
||||
} from '../test-utils.js';
|
||||
import { fileURLToPath } from 'node:url';
|
||||
import { expect } from 'chai';
|
||||
import { createContainer } from '../../../dist/core/dev/container.js';
|
||||
import testAdapter from '../../test-adapter.js';
|
||||
|
||||
const root = new URL('../../fixtures/api-routes/', import.meta.url);
|
||||
const fileSystem = {
|
||||
'/src/pages/api.ts': `export const GET = () => Response.json({ success: true })`,
|
||||
};
|
||||
|
||||
describe('trailingSlash', () => {
|
||||
let container;
|
||||
let settings;
|
||||
|
||||
before(async () => {
|
||||
const fs = createFs(fileSystem, root);
|
||||
settings = await createBasicSettings({
|
||||
root: fileURLToPath(root),
|
||||
trailingSlash: 'always',
|
||||
output: 'server',
|
||||
adapter: testAdapter(),
|
||||
});
|
||||
container = await createContainer({
|
||||
fs,
|
||||
settings,
|
||||
logger: defaultLogger,
|
||||
});
|
||||
});
|
||||
|
||||
after(async () => {
|
||||
await container.close();
|
||||
});
|
||||
|
||||
it('should match the API route when request has a trailing slash', async () => {
|
||||
const { req, res, text } = createRequestAndResponse({
|
||||
method: 'GET',
|
||||
url: '/api/',
|
||||
});
|
||||
container.handle(req, res);
|
||||
const json = await text();
|
||||
expect(json).to.equal('{"success":true}');
|
||||
});
|
||||
|
||||
it('should NOT match the API route when request lacks a trailing slash', async () => {
|
||||
const { req, res, text } = createRequestAndResponse({
|
||||
method: 'GET',
|
||||
url: '/api',
|
||||
});
|
||||
container.handle(req, res);
|
||||
expect(await text()).to.equal('');
|
||||
expect(res.statusCode).to.equal(404);
|
||||
});
|
||||
});
|
Loading…
Add table
Reference in a new issue