Hi, I know this library is supposed to be framework agnostic, but it seems to be generating a bad interaction with Next.js. I have a counter defined like this:
let httpRequestsTotal = new client.Counter({
name: "http_requests_total",
help: "Total number of HTTP requests",
labelNames: ["method", "route", "statusCode"],
})
This counter works well if used from within an API route for example. Thing is, I want it to catch every single request, so I use it where it makes most sense, in a middleware:
import { NextResponse } from "next/server";
import type { NextRequest } from "next/server";
import { metrics } from "@/modules/common/metrics";
export function middleware(request: NextRequest) {
NextResponse.next();
console.log(`${request.method} -- ${request.url}`);
metrics.httpRequestsTotal.inc({ method: request.method, route: request.url });
}
Doing this throws the following error:
Server Error
Error: A Node.js API is used (process.uptime) which is not supported in the Edge Runtime.
This might not make a lot of sense if you don't know Next.js but some code, like the middleware, runs on a different JS runtime where it cannot be assumed that Node.js global APIs are available. My main question is: why would a counter.inc() call process.uptime? Seems unnecessary.
Ideally, no Node.js specific APIs should be used, only standard Web APIs, unless specifically required (and being able to opt-out).
thanks for the help
Hi, I know this library is supposed to be framework agnostic, but it seems to be generating a bad interaction with Next.js. I have a counter defined like this:
This counter works well if used from within an API route for example. Thing is, I want it to catch every single request, so I use it where it makes most sense, in a middleware:
Doing this throws the following error:
This might not make a lot of sense if you don't know Next.js but some code, like the middleware, runs on a different JS runtime where it cannot be assumed that Node.js global APIs are available. My main question is: why would a counter.inc() call process.uptime? Seems unnecessary.
Ideally, no Node.js specific APIs should be used, only standard Web APIs, unless specifically required (and being able to opt-out).
thanks for the help