Okay here is my file so far:
import { createFileRoute } from "@tanstack/react-router";
import { createMiddleware } from "@tanstack/react-start";
import { createServerFileRoute } from "@tanstack/react-start/server";
const authMiddleware = createMiddleware({ type: "request" }).server(
async ({ next, request }) => {
console.log("next", next);
const authToken = request.headers.get("authorization");
if (!authToken) {
return new Response("Authentication Required", {
status: 401,
headers: {
"WWW-Authenticate": 'Basic realm="Admin Page"',
},
});
}
return next();
},
);
export const ServerRoute = createServerFileRoute("/admin").methods((api) => ({
GET: api.middleware([authMiddleware]).handler(async ({ request }) => {
return new Response("Hello, world!");
}),
}));
export const Route = createFileRoute("/admin")({
component: RouteComponent,
});
function RouteComponent() {
return <div>Hello "/admin"!</div>;
}
I have a couple of questions:
- Do I need a middleware if I can just my auth logic in the GET request handler?
- The webpage now just shows "Hello, world!" instead of "Hello /admin!". Why is the RouteComponent getting overridden?
- What is the purpose of the server.ts file? I thought I would need it to enable ServerRoutes but it doesn't look like I need to.
- Am getting a typescript error on my authMiddleware:
Argument of type '({ next, request }: RequestServerOptions<undefined>) => Promise<Response | RequestServerResult<undefined, undefined>>' is not assignable to parameter of type 'RequestServerFn<undefined, undefined>'.
Type 'Promise<Response | RequestServerResult<undefined, undefined>>' is not assignable to type 'RequestMiddlewareServerFnResult<undefined, undefined>'.```