78 lines
2.0 KiB
JavaScript
78 lines
2.0 KiB
JavaScript
// Note that this file isn't processed by Vite, see https://github.com/brillout/vite-plugin-ssr/issues/562
|
|
const config = require('config');
|
|
const express = require('express');
|
|
const Router = require('express-promise-router');
|
|
const session = require('express-session');
|
|
const RedisStore = require('connect-redis').default;
|
|
const bodyParser = require('body-parser');
|
|
const compression = require('compression');
|
|
const sirv = require('sirv');
|
|
const vite = require('vite');
|
|
|
|
const logger = require('../logger')(__filename);
|
|
const redis = require('../redis').client;
|
|
|
|
const initDefaultHandler = require('./default');
|
|
|
|
const setIp = require('./ip');
|
|
const errorHandler = require('./error');
|
|
|
|
const {
|
|
login,
|
|
logout,
|
|
fetchUser,
|
|
createUser,
|
|
} = require('./users');
|
|
|
|
const { createShelf } = require('./shelves');
|
|
|
|
const root = `${__dirname}/../..`;
|
|
|
|
async function startServer() {
|
|
const app = express();
|
|
const router = Router();
|
|
const sessionStore = new RedisStore({ client: redis });
|
|
|
|
const defaultHandler = await initDefaultHandler();
|
|
|
|
app.disable('x-powered-by');
|
|
app.set('trust proxy', 1);
|
|
|
|
router.use(session({ ...config.web.session, store: sessionStore }));
|
|
router.use(setIp);
|
|
router.use(bodyParser.json({ strict: false }));
|
|
app.use(compression());
|
|
|
|
if (process.env.NODE_ENV === 'production') {
|
|
app.use(sirv(`${root}/dist/client`));
|
|
} else {
|
|
const viteDevMiddleware = (await vite.createServer({
|
|
root,
|
|
server: { middlewareMode: true },
|
|
})).middlewares;
|
|
|
|
app.use(viteDevMiddleware);
|
|
}
|
|
|
|
router.get('/api/session', fetchUser);
|
|
router.post('/api/session', login);
|
|
router.delete('/api/session', logout);
|
|
|
|
router.post('/api/shelves', createShelf);
|
|
|
|
router.post('/api/users', createUser);
|
|
|
|
router.get('*', defaultHandler);
|
|
router.use(errorHandler);
|
|
|
|
app.use(router);
|
|
|
|
const server = app.listen(process.env.PORT || config.web.port, process.env.HOST || config.web.host, () => {
|
|
const { address, port } = server.address();
|
|
|
|
logger.info(`Server running at ${address}:${port}`);
|
|
});
|
|
}
|
|
|
|
startServer();
|