chore: Setup typescript for the express app

This commit is contained in:
Faruk AYDIN
2021-10-03 18:55:01 +02:00
committed by Ali BARIN
parent 701fc48d6f
commit fbc2b1e00a
10 changed files with 604 additions and 149 deletions

View File

@@ -1,31 +0,0 @@
var createError = require('http-errors');
var express = require('express');
var logger = require('morgan');
var indexRouter = require('./routes/index');
var app = express();
app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use('/', indexRouter);
// catch 404 and forward to error handler
app.use(function(req, res, next) {
next(createError(404));
});
// error handler
app.use(function(err, req, res, next) {
// set locals, only providing error in development
res.locals.message = err.message;
res.locals.error = req.app.get('env') === 'development' ? err : {};
// render the error page
res.status(err.status || 500);
res.render('error');
});
module.exports = app;

View File

@@ -1,90 +0,0 @@
#!/usr/bin/env node
/**
* Module dependencies.
*/
var app = require('../app');
var debug = require('debug')('backend:server');
var http = require('http');
/**
* Get port from environment and store in Express.
*/
var port = normalizePort(process.env.PORT || '3000');
app.set('port', port);
/**
* Create HTTP server.
*/
var server = http.createServer(app);
/**
* Listen on provided port, on all network interfaces.
*/
server.listen(port);
server.on('error', onError);
server.on('listening', onListening);
/**
* Normalize a port into a number, string, or false.
*/
function normalizePort(val) {
var port = parseInt(val, 10);
if (isNaN(port)) {
// named pipe
return val;
}
if (port >= 0) {
// port number
return port;
}
return false;
}
/**
* Event listener for HTTP server "error" event.
*/
function onError(error) {
if (error.syscall !== 'listen') {
throw error;
}
var bind = typeof port === 'string'
? 'Pipe ' + port
: 'Port ' + port;
// handle specific listen errors with friendly messages
switch (error.code) {
case 'EACCES':
console.error(bind + ' requires elevated privileges');
process.exit(1);
break;
case 'EADDRINUSE':
console.error(bind + ' is already in use');
process.exit(1);
break;
default:
throw error;
}
}
/**
* Event listener for HTTP server "listening" event.
*/
function onListening() {
var addr = server.address();
var bind = typeof addr === 'string'
? 'pipe ' + addr
: 'port ' + addr.port;
debug('Listening on ' + bind);
}

View File

@@ -3,7 +3,9 @@
"version": "0.1.0",
"description": "> TODO: description",
"scripts": {
"start": "node ./bin/www",
"dev": "nodemon --watch 'src/**/*.ts' --exec 'ts-node' src/app.ts",
"build": "tsc",
"start": "node dist/index.js",
"test": "echo \"Error: run tests from root\" && exit 1"
},
"dependencies": {
@@ -33,5 +35,13 @@
},
"bugs": {
"url": "https://github.com/automatisch/automatisch/issues"
},
"devDependencies": {
"@types/express": "^4.17.13",
"@types/http-errors": "^1.8.1",
"@types/morgan": "^1.9.3",
"@types/node": "^16.10.2",
"nodemon": "^2.0.13",
"ts-node": "^10.2.1"
}
}

View File

@@ -1,9 +0,0 @@
var express = require('express');
var router = express.Router();
/* GET home page. */
router.get('/', function(req, res, next) {
res.json({ hello: 'world' })
});
module.exports = router;

View File

@@ -0,0 +1,34 @@
import createError from 'http-errors';
import express, { Request, Response, NextFunction } from 'express';
import logger from 'morgan';
import indexRouter from './routes/index';
const app = express();
const port = process.env.PORT || '3000';
app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use('/', indexRouter);
app.listen(port, () => {
return console.log(`Server is listening on ${port}`)
})
// catch 404 and forward to error handler
app.use(function(req: Request, res: Response, next: NextFunction) {
next(createError(404));
});
// error handler
app.use(function(err: any, req: Request, res: Response, _next: NextFunction) {
// set locals, only providing error in development
res.locals.message = err.message;
res.locals.error = req.app.get('env') === 'development' ? err : {};
// render the error page
res.status(err.status || 500);
res.render('error');
});

View File

@@ -1,7 +0,0 @@
'use strict';
module.exports = backend;
function backend() {
// TODO
}

View File

@@ -0,0 +1,7 @@
import { Request, Response } from 'express';
const indexRouter = (_request: Request, response: Response) => {
return response.json({ hello: 'world!' })
};
export default indexRouter;

View File

@@ -0,0 +1,21 @@
{
"compilerOptions": {
"module": "commonjs",
"esModuleInterop": true,
"target": "es6",
"noImplicitAny": true,
"moduleResolution": "node",
"sourceMap": true,
"outDir": "dist",
"baseUrl": ".",
"paths": {
"*": [
"node_modules/*",
"src/types/*"
]
}
},
"include": [
"src/**/*"
]
}