@@ -28,11 +28,9 @@ Nova.__index = Nova
2828
2929Nova .chain = require ("@utils/Chain" )
3030Nova .response = require ("@utils/Response" )
31+ Nova .exception = require ("@utils/Exception" )
3132
32- local function devMiddleware (req : Types .Request , next : Types .Next )
33- local res = next ()
34- local status = res .config .status or 200
35-
33+ local function statusLog (status : number , req )
3634 local statusColor = "\27 [31m"
3735 if status >= 200 and status < 300 then
3836 statusColor = "\27 [32m"
@@ -47,6 +45,13 @@ local function devMiddleware(req: Types.Request, next: Types.Next)
4745 end
4846end
4947
48+ local function devMiddleware (req : Types .Request , next : Types .Next )
49+ local res = next ()
50+ local status = res .config .status or 200
51+
52+ statusLog (status , req )
53+ end
54+
5055function Nova .new (port : number , middlewares : { (req : Types .Request , next : Types .Next ) -> () }? )
5156 local self = setmetatable ({}, Nova )
5257 self .port = port
@@ -120,20 +125,30 @@ function Nova:listen(handler: () -> ())
120125 return FAVICON_CACHED_RESPONSE or FAVICON_EMPTY_RESPONSE :: net .NetResponse
121126 end
122127
123- local success , result : Types .ResponsePayload | any = pcall (rootPipeline , request )
124-
128+ local success , result : Types .ResponsePayload
129+ | { statusCode : number , message : string } | any = pcall (rootPipeline , request )
130+
125131 if not success then
126- if isDev then
132+ statusLog (result .statusCode or 500 , request )
133+ if typeof (result ) == "table" then
134+ return {
135+ status = result .statusCode ,
136+ body = encode ("json" , { error = result .message }),
137+ headers = { ["Content-Type" ] = "application/json" }
138+ }
139+ else
127140 local errorMessage = debug.traceback (tostring (result ), 2 )
128- print ("\27 [31m[Error]: " .. errorMessage .. "\27 [0m" )
141+ print ("\27 [31m[Error]: \n " .. errorMessage .. "\27 [0m" )
142+
143+ return INTERNAL_ERROR_RESPONSE :: net .NetResponse
129144 end
130- return INTERNAL_ERROR_RESPONSE :: net .NetResponse
131145 end
132-
133- local status : number
146+
147+ local status : number ?
134148 local headers = nil
135149
136150 if result .config then
151+
137152 status = result .config .status
138153 headers = result .config .headers
139154 end
0 commit comments