mirror of
https://github.com/directus/directus.git
synced 2026-02-08 02:15:08 -05:00
Merge pull request #5 from directus/errors
Support throw-style errors + auto get port
This commit is contained in:
10
package-lock.json
generated
10
package-lock.json
generated
@@ -960,6 +960,11 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"express-async-handler": {
|
||||
"version": "1.1.4",
|
||||
"resolved": "https://registry.npmjs.org/express-async-handler/-/express-async-handler-1.1.4.tgz",
|
||||
"integrity": "sha512-HdmbVF4V4w1q/iz++RV7bUxIeepTukWewiJGkoCKQMtvPF11MLTa7It9PRc/reysXXZSEyD4Pthchju+IUbMiQ=="
|
||||
},
|
||||
"extend": {
|
||||
"version": "3.0.2",
|
||||
"resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
|
||||
@@ -1193,6 +1198,11 @@
|
||||
"integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==",
|
||||
"dev": true
|
||||
},
|
||||
"get-port": {
|
||||
"version": "5.1.1",
|
||||
"resolved": "https://registry.npmjs.org/get-port/-/get-port-5.1.1.tgz",
|
||||
"integrity": "sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ=="
|
||||
},
|
||||
"get-stdin": {
|
||||
"version": "4.0.1",
|
||||
"resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz",
|
||||
|
||||
@@ -51,6 +51,8 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"express": "^4.17.1",
|
||||
"express-async-handler": "^1.1.4",
|
||||
"get-port": "^5.1.1",
|
||||
"mssql": "^6.2.0",
|
||||
"mysql": "^2.18.1",
|
||||
"oracledb": "^4.2.0",
|
||||
|
||||
13
src/app.ts
13
src/app.ts
@@ -1,5 +1,14 @@
|
||||
import express from "express";
|
||||
import express from 'express';
|
||||
import asyncHandler from 'express-async-handler';
|
||||
import APIError, { errorHandler, ErrorCode } from './error';
|
||||
|
||||
const app = express();
|
||||
const app = express()
|
||||
.get(
|
||||
'/',
|
||||
asyncHandler(async (req, res, next) => {
|
||||
throw new APIError(ErrorCode.NOT_FOUND, 'Route `/` not found');
|
||||
})
|
||||
)
|
||||
.use(errorHandler);
|
||||
|
||||
export default app;
|
||||
|
||||
39
src/error.ts
Normal file
39
src/error.ts
Normal file
@@ -0,0 +1,39 @@
|
||||
import { ErrorRequestHandler } from 'express';
|
||||
|
||||
export enum ErrorCode {
|
||||
NOT_FOUND = 'NOT_FOUND',
|
||||
}
|
||||
|
||||
enum HTTPStatus {
|
||||
NOT_FOUND = 404,
|
||||
}
|
||||
|
||||
export const errorHandler: ErrorRequestHandler = (error: APIError, req, res, next) => {
|
||||
res.status(error.status);
|
||||
|
||||
const response: any = {
|
||||
error: {
|
||||
code: error.code,
|
||||
message: error.message,
|
||||
},
|
||||
};
|
||||
|
||||
if ((process.env.NODE_ENV = 'development')) {
|
||||
response.error.stack = error.stack;
|
||||
}
|
||||
|
||||
res.json(response);
|
||||
};
|
||||
|
||||
export default class APIError extends Error {
|
||||
status: HTTPStatus;
|
||||
code: ErrorCode;
|
||||
|
||||
constructor(code: ErrorCode, message: string) {
|
||||
super(message);
|
||||
this.status = HTTPStatus[code] || 500;
|
||||
this.code = code;
|
||||
|
||||
Error.captureStackTrace(this, this.constructor);
|
||||
}
|
||||
}
|
||||
@@ -1,8 +1,11 @@
|
||||
import app from "./app";
|
||||
import logger from "./logger";
|
||||
import app from './app';
|
||||
import logger from './logger';
|
||||
import getPort from 'get-port';
|
||||
|
||||
const port = process.env.PORT || 3000;
|
||||
(async () => {
|
||||
const port = process.env.PORT || (await getPort({ port: 3000 }));
|
||||
|
||||
app.listen(port, () => {
|
||||
logger.info(`Server started at port ${port}`);
|
||||
});
|
||||
app.listen(port, () => {
|
||||
logger.info(`Server started at port ${port}`);
|
||||
});
|
||||
})();
|
||||
|
||||
@@ -10,4 +10,4 @@
|
||||
"lib": [
|
||||
"es2015"
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user