Express.js: Difference between revisions
(9 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
Express.js, also known as Express, is a Node.js web-framework. | Express.js, also known as Express, is a Node.js web-framework. | ||
It provides access to routing and a rich community of middleware. | |||
The benefit to using JS/TS for your backend is that your full stack is in a single-language. | |||
This also means you can use all of your favorite libraries on npm. | |||
However, since JS is single-threaded, you need to be careful with optimization (i.e. async programming). | |||
Deployment may require running multiple instances of your application even on the same VM. | |||
==Getting Started== | ==Getting Started== | ||
To create a project, do | To create a project, do | ||
<pre> | <pre> | ||
npx express-generator | npx express-generator --view=pug | ||
</pre> | </pre> | ||
or | or | ||
<pre> | <pre> | ||
npm i -g express-generator | npm i -g express-generator | ||
express [dir] | express --view=pug [dir] | ||
</pre> | </pre> | ||
See [https://expressjs.com/en/starter/generator.html express starter generator] for more details. | See [https://expressjs.com/en/starter/generator.html express starter generator] for more details. | ||
* By default, express uses jade for its template engine. This has been replaced by pug. | |||
* If you want to make a typescript project, you can also try [https://www.npmjs.com/package/express-generator-typescript express-generator-typescript]. | |||
** This is made by a third-party and includes some extra libraries. | |||
==Usage== | ==Usage== | ||
Line 17: | Line 28: | ||
See [https://expressjs.com/en/guide/routing.html Guide: Routing] | See [https://expressjs.com/en/guide/routing.html Guide: Routing] | ||
==Database== | |||
See [https://expressjs.com/en/guide/database-integration.html#mysql Express database integration] | |||
Express does not provide any special methods for interacting with databases. | |||
Below are some ways of interacting with databases. | |||
* [https://sequelize.org/ Sequelize] is an object-relation mapping (ORM) for Node. It supports Postgres, MySQL, MariaDB, SQLite, and Microsoft SQL Server. | |||
* [https://typeorm.io/#/ TypeORM] is another ORM from Node. | |||
** We currently use TypeORM for [https://tuneix.com https://tuneix.com]. | |||
* [http://knexjs.org/ Knex.js] is an SQL query builder. | |||
* [https://github.com/Vincit/objection.js Objection.js] is another ORM built on Knex.js. | |||
==Proxies== | |||
It is typically recommended to run express behind a proxy (e.g. Nginx) for production. | |||
See [https://expressjs.com/en/guide/behind-proxies.html guide: behind-proxies] for how to configure this such that the client hostname is correct. | |||
<syntaxhighlight lang="typescript"> | |||
app.set('trust proxy', 'loopback'); | |||
</syntaxhighlight> | |||
==Libraries== | ==Libraries== | ||
* [https://www.npmjs.com/package/express- | Some common libraries and middleware | ||
* [https://www.npmjs.com/package/express-rate-limit express-rate-limit] adds rate limiting. | |||
* [https://expressjs.com/en/resources/middleware/csurf.html csrf] adds csrf protection. | |||
==Resources== | ==Resources== | ||
* [https://expressjs.com/en/starter/examples.html Express Examples] | * [https://expressjs.com/en/starter/examples.html Express Examples] | ||
* [https://expressjs.com/en/starter/faq.html Express FAQ] | * [https://expressjs.com/en/starter/faq.html Express FAQ] | ||
* [https://medium.com/better-programming/get-started-with-typeorm-mysql-and-express-js-653270a6a078 Getting Started TypeORM and Express.js by Songtham Tung] | |||
* [https://medium.com/better-programming/typeorm-migrations-explained-fdb4f27cb1b3 TypeORM Migrations Explained] |
Latest revision as of 05:56, 7 September 2020
Express.js, also known as Express, is a Node.js web-framework.
It provides access to routing and a rich community of middleware.
The benefit to using JS/TS for your backend is that your full stack is in a single-language.
This also means you can use all of your favorite libraries on npm.
However, since JS is single-threaded, you need to be careful with optimization (i.e. async programming).
Deployment may require running multiple instances of your application even on the same VM.
Getting Started
To create a project, do
npx express-generator --view=pug
or
npm i -g express-generator express --view=pug [dir]
See express starter generator for more details.
- By default, express uses jade for its template engine. This has been replaced by pug.
- If you want to make a typescript project, you can also try express-generator-typescript.
- This is made by a third-party and includes some extra libraries.
Usage
Routing
See Guide: Routing
Database
See Express database integration
Express does not provide any special methods for interacting with databases.
Below are some ways of interacting with databases.
- Sequelize is an object-relation mapping (ORM) for Node. It supports Postgres, MySQL, MariaDB, SQLite, and Microsoft SQL Server.
- TypeORM is another ORM from Node.
- We currently use TypeORM for https://tuneix.com.
- Knex.js is an SQL query builder.
- Objection.js is another ORM built on Knex.js.
Proxies
It is typically recommended to run express behind a proxy (e.g. Nginx) for production.
See guide: behind-proxies for how to configure this such that the client hostname is correct.
app.set('trust proxy', 'loopback');
Libraries
Some common libraries and middleware
- express-rate-limit adds rate limiting.
- csrf adds csrf protection.