node-web-mvc
Version:
node spring mvc
48 lines (47 loc) • 1.87 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
/**
* WorkerResourceRunner 可用于WorkerResourceResolver提供的workerJs
* 在workerJs中可以使用当前类实例来运行请求交互
*/
const worker_threads_1 = require("worker_threads");
const WorkerIncomingMessage_1 = __importDefault(require("./WorkerIncomingMessage"));
const WorkerServerResponse_1 = __importDefault(require("./WorkerServerResponse"));
class WorkerResourceRunner {
constructor(...middlewares) {
this.middlewares = middlewares;
worker_threads_1.parentPort.on('message', this.onRequest.bind(this));
}
async onRequest(info) {
const port = info.port;
try {
const request = new WorkerIncomingMessage_1.default(info);
const response = new WorkerServerResponse_1.default(request);
await new Promise((resolve, reject) => {
const middlewares = [
...this.middlewares,
// 404
() => port.postMessage({ type: 'finished' }),
];
const handler = middlewares.reverse().reduce((next, middleware) => {
return () => {
try {
middleware(request, response, (ex) => (ex ? reject(ex) : next()));
}
catch (ex) {
reject(ex);
}
};
});
handler(request, response, resolve);
});
}
catch (ex) {
port.postMessage({ type: 'error', error: ex });
}
}
}
exports.default = WorkerResourceRunner;