Skip to content

Commit

Permalink
chore(nitro): update deprecated event req,res
Browse files Browse the repository at this point in the history
  • Loading branch information
cpreston321 committed Jan 11, 2023
1 parent 15edef0 commit a6e3a3a
Show file tree
Hide file tree
Showing 9 changed files with 68 additions and 64 deletions.
10 changes: 5 additions & 5 deletions src/dev/error.ts
Original file line number Diff line number Diff line change
@@ -1,22 +1,22 @@
import { NitroErrorHandler } from "../types";

function errorHandler(error, event) {
event.res.setHeader("Content-Type", "text/html; charset=UTF-8");
event.res.statusCode = 503;
event.res.statusMessage = "Server Unavailable";
event.node.res.setHeader("Content-Type", "text/html; charset=UTF-8");
event.node.res.statusCode = 503;
event.node.res.statusMessage = "Server Unavailable";

let body;
let title;
if (error) {
title = `${event.res.statusCode} ${event.res.statusMessage}`;
title = `${event.node.res.statusCode} ${event.node.res.statusMessage}`;
body = `<code><pre>${error.stack}</pre></code>`;
} else {
title = "Reloading server...";
body =
"<progress></progress><script>document.querySelector('progress').indeterminate=true</script>";
}

event.res.end(`<!DOCTYPE html>
event.node.res.end(`<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
Expand Down
4 changes: 2 additions & 2 deletions src/dev/server.ts
Original file line number Diff line number Diff line change
Expand Up @@ -223,8 +223,8 @@ function createProxy(defaults: HTTPProxyOptions = {}) {
const handle = (event: H3Event, opts: HTTPProxyOptions = {}) => {
return new Promise<void>((resolve, reject) => {
proxy.web(
event.req,
event.res,
event.node.req,
event.node.res,
{ ...defaults, ...opts },
(error: any) => {
if (error.code !== "ECONNRESET") {
Expand Down
16 changes: 8 additions & 8 deletions src/runtime/cache.ts
Original file line number Diff line number Diff line change
Expand Up @@ -149,7 +149,7 @@ export function defineCachedEventHandler<T = any>(
if (key) {
return escapeKey(key);
}
const url = event.req.originalUrl || event.req.url;
const url = event.node.req.originalUrl || event.node.req.url;
const friendlyName = escapeKey(decodeURI(parseURL(url).pathname)).slice(
0,
16
Expand All @@ -173,10 +173,10 @@ export function defineCachedEventHandler<T = any>(
const _cachedHandler = cachedFunction<ResponseCacheEntry<T>>(
async (incomingEvent: H3Event) => {
// Create proxies to avoid sharing state with user request
const reqProxy = cloneWithProxy(incomingEvent.req, { headers: {} });
const reqProxy = cloneWithProxy(incomingEvent.node.req, { headers: {} });
const resHeaders: Record<string, number | string | string[]> = {};
let _resSendBody;
const resProxy = cloneWithProxy(incomingEvent.res, {
const resProxy = cloneWithProxy(incomingEvent.node.res, {
statusCode: 200,
getHeader(name) {
return resHeaders[name];
Expand Down Expand Up @@ -238,7 +238,7 @@ export function defineCachedEventHandler<T = any>(
const body = (await handler(event)) || _resSendBody;

// Collect cachable headers
const headers = event.res.getHeaders();
const headers = event.node.res.getHeaders();
headers.etag = headers.Etag || headers.etag || `W/"${hash(body)}"`;
headers["last-modified"] =
headers["Last-Modified"] ||
Expand All @@ -263,7 +263,7 @@ export function defineCachedEventHandler<T = any>(

// Create cache entry for response
const cacheEntry: ResponseCacheEntry<T> = {
code: event.res.statusCode,
code: event.node.res.statusCode,
headers,
body,
};
Expand All @@ -287,7 +287,7 @@ export function defineCachedEventHandler<T = any>(
const response = await _cachedHandler(event);

// Don't continue if response is already handled by user
if (event.res.headersSent || event.res.writableEnded) {
if (event.node.res.headersSent || event.node.res.writableEnded) {
return response.body;
}

Expand All @@ -303,9 +303,9 @@ export function defineCachedEventHandler<T = any>(
}

// Send status and headers
event.res.statusCode = response.code;
event.node.res.statusCode = response.code;
for (const name in response.headers) {
event.res.setHeader(name, response.headers[name]);
event.node.res.setHeader(name, response.headers[name]);
}

// Send body
Expand Down
14 changes: 7 additions & 7 deletions src/runtime/error.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ export default <NitroErrorHandler>function (error, event) {
const showDetails = isDev && statusCode !== 404;

const errorObject = {
url: event.req.url || "",
url: event.node.req.url || "",
statusCode,
statusMessage,
message,
Expand All @@ -41,17 +41,17 @@ export default <NitroErrorHandler>function (error, event) {
);
}

event.res.statusCode = statusCode;
event.node.res.statusCode = statusCode;
if (statusMessage) {
event.res.statusMessage = statusMessage;
event.node.res.statusMessage = statusMessage;
}

if (isJsonRequest(event)) {
event.res.setHeader("Content-Type", "application/json");
event.res.end(JSON.stringify(errorObject));
event.node.res.setHeader("Content-Type", "application/json");
event.node.res.end(JSON.stringify(errorObject));
} else {
event.res.setHeader("Content-Type", "text/html");
event.res.end(renderHTMLError(errorObject));
event.node.res.setHeader("Content-Type", "text/html");
event.node.res.end(renderHTMLError(errorObject));
}
};

Expand Down
24 changes: 12 additions & 12 deletions src/runtime/renderer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,21 +15,21 @@ export type RenderHandler = (
export function defineRenderHandler(handler: RenderHandler) {
return eventHandler(async (event) => {
// TODO: Use serve-placeholder
if (event.req.url.endsWith("/favicon.ico")) {
event.res.setHeader("Content-Type", "image/x-icon");
event.res.end(
if (event.node.req.url.endsWith("/favicon.ico")) {
event.node.res.setHeader("Content-Type", "image/x-icon");
event.node.res.end(
"data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7"
);
return;
}

const response = await handler(event);
if (!response) {
if (!event.res.writableEnded) {
event.res.statusCode =
event.res.statusCode === 200 ? 500 : event.res.statusCode;
event.res.end(
"No response returned from render handler: " + event.req.url
if (!event.node.res.writableEnded) {
event.node.res.statusCode =
event.node.res.statusCode === 200 ? 500 : event.node.res.statusCode;
event.node.res.end(
"No response returned from render handler: " + event.node.req.url
);
}
return;
Expand All @@ -44,15 +44,15 @@ export function defineRenderHandler(handler: RenderHandler) {
// TODO: Caching support

// Send headers
if (!event.res.headersSent && response.headers) {
if (!event.node.res.headersSent && response.headers) {
for (const header in response.headers) {
event.res.setHeader(header, response.headers[header]);
event.node.res.setHeader(header, response.headers[header]);
}
if (response.statusCode) {
event.res.statusCode = response.statusCode;
event.node.res.statusCode = response.statusCode;
}
if (response.statusMessage) {
event.res.statusMessage = response.statusMessage;
event.node.res.statusMessage = response.statusMessage;
}
}

Expand Down
2 changes: 1 addition & 1 deletion src/runtime/route-rules.ts
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ export function createRouteRulesHandler() {
export function getRouteRules(event: H3Event): NitroRouteRules {
event.context._nitro = event.context._nitro || {};
if (!event.context._nitro.routeRules) {
const path = new URL(event.req.url, "http://localhost").pathname;
const path = new URL(event.node.req.url, "http://localhost").pathname;
event.context._nitro.routeRules = getRouteRulesForPath(
withoutBase(path, useRuntimeConfig().app.baseURL)
);
Expand Down
46 changes: 25 additions & 21 deletions src/runtime/static.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,16 +11,20 @@ const METHODS = new Set(["HEAD", "GET"]);
const EncodingMap = { gzip: ".gz", br: ".br" };

export default eventHandler((event) => {
if (event.req.method && !METHODS.has(event.req.method)) {
if (event.node.req.method && !METHODS.has(event.node.req.method)) {
return;
}

let id = decodeURIComponent(
withLeadingSlash(withoutTrailingSlash(parseURL(event.req.url).pathname))
withLeadingSlash(
withoutTrailingSlash(parseURL(event.node.req.url).pathname)
)
);
let asset;

const encodingHeader = String(event.req.headers["accept-encoding"] || "");
const encodingHeader = String(
event.node.req.headers["accept-encoding"] || ""
);
const encodings = [
...encodingHeader
.split(",")
Expand All @@ -30,7 +34,7 @@ export default eventHandler((event) => {
"",
];
if (encodings.length > 1) {
event.res.setHeader("Vary", "Accept-Encoding");
event.node.res.setHeader("Vary", "Accept-Encoding");
}

for (const encoding of encodings) {
Expand All @@ -54,48 +58,48 @@ export default eventHandler((event) => {
return;
}

const ifNotMatch = event.req.headers["if-none-match"] === asset.etag;
const ifNotMatch = event.node.req.headers["if-none-match"] === asset.etag;
if (ifNotMatch) {
event.res.statusCode = 304;
event.res.end();
event.node.res.statusCode = 304;
event.node.res.end();
return;
}

const ifModifiedSinceH = event.req.headers["if-modified-since"];
const ifModifiedSinceH = event.node.req.headers["if-modified-since"];
if (
ifModifiedSinceH &&
asset.mtime &&
new Date(ifModifiedSinceH) >= new Date(asset.mtime)
) {
event.res.statusCode = 304;
event.res.end();
event.node.res.statusCode = 304;
event.node.res.end();
return;
}

if (asset.type && !event.res.getHeader("Content-Type")) {
event.res.setHeader("Content-Type", asset.type);
if (asset.type && !event.node.res.getHeader("Content-Type")) {
event.node.res.setHeader("Content-Type", asset.type);
}

if (asset.etag && !event.res.getHeader("ETag")) {
event.res.setHeader("ETag", asset.etag);
if (asset.etag && !event.node.res.getHeader("ETag")) {
event.node.res.setHeader("ETag", asset.etag);
}

if (asset.mtime && !event.res.getHeader("Last-Modified")) {
event.res.setHeader("Last-Modified", asset.mtime);
if (asset.mtime && !event.node.res.getHeader("Last-Modified")) {
event.node.res.setHeader("Last-Modified", asset.mtime);
}

if (asset.encoding && !event.res.getHeader("Content-Encoding")) {
event.res.setHeader("Content-Encoding", asset.encoding);
if (asset.encoding && !event.node.res.getHeader("Content-Encoding")) {
event.node.res.setHeader("Content-Encoding", asset.encoding);
}

if (asset.size > 0 && !event.res.getHeader("Content-Length")) {
event.res.setHeader("Content-Length", asset.size);
if (asset.size > 0 && !event.node.res.getHeader("Content-Length")) {
event.node.res.setHeader("Content-Length", asset.size);
}

// TODO: Asset dir cache control
// if (isBuildAsset) {
// const TWO_DAYS = 2 * 60 * 60 * 24
// event.res.setHeader('Cache-Control', `max-age=${TWO_DAYS}, immutable`)
// event.node.res.setHeader('Cache-Control', `max-age=${TWO_DAYS}, immutable`)
// }

return readAsset(id);
Expand Down
12 changes: 6 additions & 6 deletions src/runtime/timing.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,8 @@ export const globalTiming = globalThis.__timing__ || {
export const timingMiddleware = eventHandler((event) => {
const start = globalTiming.start();

const _end = event.res.end;
event.res.end = function (
const _end = event.node.res.end;
event.node.res.end = function (
chunk: any,
encoding: BufferEncoding,
cb?: () => void
Expand All @@ -23,10 +23,10 @@ export const timingMiddleware = eventHandler((event) => {
const serverTiming = metrics
.map((m) => `-;dur=${m[1]};desc="${encodeURIComponent(m[0])}"`)
.join(", ");
if (!event.res.headersSent) {
event.res.setHeader("Server-Timing", serverTiming);
if (!event.node.res.headersSent) {
event.node.res.setHeader("Server-Timing", serverTiming);
}
_end.call(event.res, chunk, encoding, cb);
_end.call(event.node.res, chunk, encoding, cb);
return this;
}.bind(event.res);
}.bind(event.node.res);
});
4 changes: 2 additions & 2 deletions src/runtime/utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -41,8 +41,8 @@ export function isJsonRequest(event: H3Event) {
hasReqHeader(event, "accept", "application/json") ||
hasReqHeader(event, "user-agent", "curl/") ||
hasReqHeader(event, "user-agent", "httpie/") ||
event.req.url?.endsWith(".json") ||
event.req.url?.includes("/api/")
event.node.req.url?.endsWith(".json") ||
event.node.req.url?.includes("/api/")
);
}

Expand Down

0 comments on commit a6e3a3a

Please sign in to comment.