core-mvc
Version:
Simple but powerful MVC framework for NodeJS.
98 lines (97 loc) • 3.86 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.ApiServer = void 0;
const express_1 = __importDefault(require("express"));
const cookie_parser_1 = __importDefault(require("cookie-parser"));
const cors_1 = __importDefault(require("cors"));
const graphql_tag_1 = __importDefault(require("graphql-tag"));
const server_1 = require("@apollo/server");
const express4_1 = require("@apollo/server/express4");
const merge_1 = require("@graphql-tools/merge");
const graphql_playground_html_1 = require("@apollographql/graphql-playground-html");
const gqlDefinitions_1 = require("./runtime/gqlDefinitions");
const decodeToken_1 = __importDefault(require("./jwt/decodeToken"));
const userDataFromToken_1 = require("./jwt/userDataFromToken");
const express_2 = require("express");
class ApiServer {
constructor(userClass) {
this.userClass = userClass;
}
start() {
const server = (0, express_1.default)();
server.disable('x-powered-by');
server.use((0, cors_1.default)({
exposedHeaders: ['Link'],
}));
server.use(express_1.default.urlencoded({ extended: true }));
server.use(express_1.default.json());
server.use((0, cookie_parser_1.default)());
const port = process.env.PORT ? +process.env.PORT : 11111;
const host = '0.0.0.0';
const schema = [
(0, graphql_tag_1.default) `
type Query {
version: String
}
`,
...(0, gqlDefinitions_1.getTypeDefinitions)(),
];
const resolvers = [
{
Query: {},
},
...(0, gqlDefinitions_1.getResolvers)(),
];
server.use((request, _, next) => {
const accessToken = request.cookies['access-token'] ||
request.cookies.accessToken ||
request.headers['x-access-token'];
if (accessToken) {
try {
request.user = (0, userDataFromToken_1.userFromTokenData)(this.userClass, (0, decodeToken_1.default)(accessToken).user);
}
catch (error) {
console.error(error);
}
}
next();
});
server.get('/', (request, result) => {
const playgroundRenderPageOptions = {
endpoint: '/',
cdnUrl: '/cdn',
};
result.setHeader('Content-Type', 'text/html');
const playground = (0, graphql_playground_html_1.renderPlaygroundPage)(playgroundRenderPageOptions);
result.write(playground);
result.end();
});
server.use('/cdn/@apollographql/graphql-playground-react', express_1.default.static('./node_modules/apollo-playground-static-files/'));
(async () => {
const apolloServer = new server_1.ApolloServer({
typeDefs: (0, merge_1.mergeTypeDefs)(schema, {}),
resolvers,
rootValue: global,
allowBatchedHttpRequests: true,
});
await apolloServer.start();
server.use('/', (0, cors_1.default)({
maxAge: 3600,
}), (0, express_2.json)(), (0, express4_1.expressMiddleware)(apolloServer, {
context: async ({ req, res }) => ({
req,
res,
}),
}));
server.listen(port, host, () => {
console.log(`Server listening ${host}:${port}`);
});
})().catch(error => {
throw error;
});
}
}
exports.ApiServer = ApiServer;