未验证 提交 c78f56b3 编写于 作者: A Asher

Expose HttpError to plugins

This will let them throw and show nice errors more easily.
上级 22d19451
......@@ -4,6 +4,7 @@ import * as fs from "fs"
import * as path from "path"
import * as semver from "semver"
import * as pluginapi from "../../typings/pluginapi"
import { HttpCode, HttpError } from "../common/http"
import { version } from "./constants"
import { replaceTemplates } from "./http"
import { proxy } from "./proxy"
......@@ -22,6 +23,8 @@ require("module")._load = function (request: string, parent: object, isMain: boo
return {
express,
field,
HttpCode,
HttpError,
Level,
proxy,
replaceTemplates,
......
......@@ -2,6 +2,7 @@ import { logger } from "@coder/logger"
import * as express from "express"
import * as fs from "fs"
import * as path from "path"
import { HttpCode } from "../src/common/http"
import { PluginAPI } from "../src/node/plugin"
import * as apps from "../src/node/routes/apps"
import * as httpserver from "./httpserver"
......@@ -81,4 +82,9 @@ describe("plugin", () => {
ws.terminate()
expect(message).toBe("hello")
})
it("/test-plugin/error", async () => {
const resp = await s.fetch("/test-plugin/error")
expect(resp.status).toBe(HttpCode.LargePayload)
})
})
......@@ -19,6 +19,9 @@ export const plugin: cs.Plugin = {
r.get("/goland/icon.svg", (_, res) => {
res.sendFile(fspath.resolve(__dirname, "../public/icon.svg"))
})
r.get("/error", () => {
throw new cs.HttpError("error", cs.HttpCode.LargePayload)
})
return r
},
......
......@@ -82,6 +82,20 @@ import Websocket from "ws"
* ]
*/
export enum HttpCode {
Ok = 200,
Redirect = 302,
NotFound = 404,
BadRequest = 400,
Unauthorized = 401,
LargePayload = 413,
ServerError = 500,
}
export declare class HttpError extends Error {
constructor(message: string, status: HttpCode, details?: object)
}
export interface WebsocketRequest extends express.Request {
ws: net.Socket
head: Buffer
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册