GithubHelp home page GithubHelp logo

express-asyncify's Introduction

express-asyncify

Easy support async/await to express.

๐Ÿšจ Since v3:

  • Node.js >= 20
  • Only ESM modules

Installation

$ npm i express express-asyncify

Usage

Asyncify express application:

import express from 'express';
import asyncify from 'express-asyncify';

const app = asyncify(express());

// ...

app.get('/', async (req, res) => {
    const posts = await Post.findAll();
    res.render('index', { posts });
});

Asyncify express router:

import express from 'express';
import asyncify from 'express-asyncify';

const app = express();
const router = asyncify(express.Router());

// ...

router.get('/', async (req, res) => {
    const posts = await Post.findAll();
    res.render('index', { posts });
});

app.use('/blog', router);

Tests

To run the test suite, first install the dependencies, then run npm test:

$ npm ci
$ npm test

License

MIT

express-asyncify's People

Contributors

pkolt avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

express-asyncify's Issues

cannot import as cjs

Just installed and I'm getting the following error:

/APP/node_modules/ts-node/dist/index.js:851
            return old(m, filename);
                   ^
Error [ERR_REQUIRE_ESM]: require() of ES Module /APP/node_modules/express-asyncify/dist/cjs/index.js from /APP/index.ts not supported.
index.js is treated as an ES module file as it is a .js file whose nearest parent package.json contains "type": "module" which declares all .js files in that package scope as ES modules.
Instead rename index.js to end in .cjs, change the requiring code to use dynamic import() which is available in all CommonJS modules, or change "type": "module" to "type": "commonjs" in /APP/node_modules/express-asyncify/package.json to treat all .js files as CommonJS (using .mjs for all ES modules instead).

    at require.extensions.<computed> [as .js] (/APP/node_modules/ts-node/dist/index.js:851:20)
    at Object.<anonymous> (/APP/index.ts:8:63)
    at m._compile (/APP/node_modules/ts-node/dist/index.js:857:29)
    at require.extensions.<computed> [as .ts] (/APP/node_modules/ts-node/dist/index.js:859:16)
    at phase4 (/APP/node_modules/ts-node/dist/bin.js:466:20)
    at bootstrap (/APP/node_modules/ts-node/dist/bin.js:54:12)
    at main (/APP/node_modules/ts-node/dist/bin.js:33:12)
    at Object.<anonymous> (/APP/node_modules/ts-node/dist/bin.js:579:5) {
  code: 'ERR_REQUIRE_ESM'
}

support array of middleware

express support array of middleware.
This is the example on express docs
https://expressjs.com/en/guide/using-middleware.html#middleware.application

function logOriginalUrl (req, res, next) {
  console.log('Request URL:', req.originalUrl)
  next()
}

function logMethod (req, res, next) {
  console.log('Request Type:', req.method)
  next()
}

const logStuff = [logOriginalUrl, logMethod]
app.get('/user/:id', logStuff, (req, res, next) => {
  res.send('User Info')
})

Problem

express-asyncify does not support array of middleware
so that, I got uncaughtException when my middleware in array throws an error.

below test code will be fail.
I only changed original test code to use middlewares with array

it('catch error to async/sync middleware', async () => {
    const app = asyncify(express());

    const asyncMiddleware = async (req: Request, res: Response, next: NextFunction) => {
      const data = await getDataAsync(new Error());
      next();
    };

    const syncMiddleware = function (req: Request, res: Response, next: NextFunction) {
      next();
    };

    app.use([asyncMiddleware, syncMiddleware], handler500);

    app.get('/', (req: Request, res: Response) => {
      res.send('ok');
    });

    const res = await request(app).get('/').expect(500);
    assert.equal(res.text, 'fail');
  });

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.