Express.js: Difference between revisions

From David's Wiki
 
(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-ws express-ws] adds websocket endpoints for 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.
  • 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

Resources