koa-connect
Advanced tools
Comparing version 1.0.0 to 2.0.0
@@ -1,14 +0,13 @@ | ||
var koa = require('koa'); | ||
var connect = require('connect'); | ||
var c2k = require('..'); | ||
var app = koa(); | ||
const Koa = require('koa') | ||
const connect = require('connect') | ||
const c2k = require('..') | ||
const app = new Koa() | ||
app.use(c2k(connect.logger('dev'))) | ||
app.use(c2k(connect.basicAuth('username', 'password'))) | ||
app.use(c2k(connect.logger('dev'))); | ||
app.use(c2k(connect.basicAuth('username', 'password'))); | ||
app.use((ctx) => { | ||
ctx.body = 'Hello' | ||
}) | ||
app.use(function * () { | ||
this.body = 'Hello'; | ||
}); | ||
app.listen(3000); | ||
app.listen(3000) |
@@ -1,17 +0,15 @@ | ||
var koa = require('koa'); | ||
var connect = require('connect'); | ||
var c2k = require('..'); | ||
var app = koa(); | ||
const Koa = require('koa') | ||
const connect = require('connect') | ||
const c2k = require('..') | ||
const app = new Koa() | ||
app.use(c2k(connect.logger('dev'))) | ||
app.use(c2k(connect.directory(__dirname))) | ||
app.use(c2k(connect.static(__dirname))) | ||
app.use(c2k(connect.logger('dev'))); | ||
app.use(c2k(connect.directory(__dirname))); | ||
app.use(c2k(connect.static(__dirname))); | ||
app.use((ctx, next) => { | ||
ctx.body = 'koa' | ||
next() | ||
}) | ||
app.use(function * () { | ||
this.body = 'koa' | ||
yield next | ||
}); | ||
app.listen(3000); | ||
app.listen(3000) |
@@ -1,13 +0,12 @@ | ||
var koa = require('koa'); | ||
var connect = require('connect'); | ||
var c2k = require('..'); | ||
var app = koa(); | ||
const Koa = require('koa') | ||
const connect = require('connect') | ||
const c2k = require('..') | ||
const app = new Koa() | ||
app.use(c2k(connect.logger('dev'))) | ||
app.use(c2k(connect.logger('dev'))); | ||
app.use((ctx) => { | ||
ctx.body = 'koa' | ||
}) | ||
app.use(function * () { | ||
this.body = 'koa'; | ||
}); | ||
app.listen(3000); | ||
app.listen(3000) |
@@ -1,16 +0,15 @@ | ||
var koa = require('koa'); | ||
var connect = require('connect'); | ||
var c2k = require('..'); | ||
var app = koa(); | ||
const Koa = require('koa') | ||
const connect = require('connect') | ||
const c2k = require('..') | ||
const app = new Koa() | ||
app.use(c2k(connect.logger('dev'))) | ||
app.use(c2k(connect.cookieParser())) | ||
app.use(c2k(connect.cookieSession({ secret: 'keyboard cat'}))) | ||
app.use(c2k(connect.logger('dev'))); | ||
app.use(c2k(connect.cookieParser())); | ||
app.use(c2k(connect.cookieSession({ secret: 'keyboard cat'}))); | ||
app.use(function * () { | ||
var name = this.req.session.name = this.query.name || this.req.session.name; | ||
this.body = name || 'Please, enter your name'; | ||
app.use((ctx) { | ||
const name = ctx.req.session.name = ctx.query.name || ctx.req.session.name | ||
ctx.body = name || 'Please, enter your name' | ||
}) | ||
app.listen(3000); | ||
app.listen(3000) |
@@ -1,16 +0,16 @@ | ||
var koa = require('koa'); | ||
var c2k = require('..'); | ||
var app = koa(); | ||
const Koa = require('koa') | ||
const c2k = require('..') | ||
function middleware (req, res, next) { | ||
console.log('connect'); | ||
next(); | ||
console.log('connect') | ||
next() | ||
} | ||
app.use(c2k(middleware)); | ||
const app = new Koa() | ||
app.use(c2k(middleware)) | ||
app.use(function * () { | ||
this.body = 'koa'; | ||
}); | ||
app.use((ctx) { | ||
ctx.body = 'koa' | ||
}) | ||
app.listen(3000); | ||
app.listen(3000) |
41
index.js
@@ -1,13 +0,38 @@ | ||
var connect = require('connect'); | ||
/** | ||
* If the middleware function does declare receiving the `next` callback | ||
* assume that it's synchronous and invoke `next` ourselves | ||
*/ | ||
function noCallbackHandler(ctx, connectMiddleware, next) { | ||
connectMiddleware(ctx.req, ctx.res) | ||
return next() | ||
} | ||
function c2k (middleware) { | ||
middleware = connect().use(middleware); | ||
/** | ||
* The middleware function does include the `next` callback so only resolve | ||
* the Promise when it's called. If it's never called, the middleware stack | ||
* completion will stall | ||
*/ | ||
function withCallbackHandler(ctx, connectMiddleware, next) { | ||
return new Promise((resolve, reject) => { | ||
connectMiddleware(ctx.req, ctx.res, err => { | ||
if (err) reject(err) | ||
else resolve(next()) | ||
}) | ||
}) | ||
} | ||
return function * (next) { | ||
yield middleware.bind(null, this.req, this.res); | ||
yield next; | ||
/** | ||
* Returns a Koa middleware function that varies its async logic based on if the | ||
* given middleware function declares at least 3 parameters, i.e. includes | ||
* the `next` callback function | ||
*/ | ||
function koaConnect(connectMiddleware) { | ||
const handler = connectMiddleware.length < 3 | ||
? noCallbackHandler | ||
: withCallbackHandler | ||
return function koaConnect(ctx, next) { | ||
return handler(ctx, connectMiddleware, next) | ||
} | ||
} | ||
module.exports = c2k; | ||
module.exports = koaConnect |
{ | ||
"name": "koa-connect", | ||
"version": "1.0.0", | ||
"description": "Use connect and express middleware in koa", | ||
"version": "2.0.0", | ||
"description": "Use Connect/Express middleware in Koa", | ||
"repository": "vkurchatkin/koa-connect", | ||
"main": "index.js", | ||
"author": "Vladimir Kurchatkin <vladimir.kurchatkin@gmail.com>", | ||
"respository": "vkurchatkin/koa-connect", | ||
"contributors": [ | ||
"Louis DeScioli <louis.descioli@gmail.com>" | ||
], | ||
"license": "MIT", | ||
"scripts": { | ||
"test": "mocha tests.js", | ||
"test:watch": "npm run test -- --watch --reporter nyan" | ||
}, | ||
"devDependencies": { | ||
"koa": "^0.10.0" | ||
"koa": "^2.0.0", | ||
"mocha": "^2.3.4", | ||
"supertest": "^1.1.0" | ||
}, | ||
"dependencies": { | ||
"connect": "^2.25.7" | ||
} | ||
"keywords": [ | ||
"koa", | ||
"connect", | ||
"express", | ||
"middleware" | ||
] | ||
} |
# koa-connect | ||
Use connect and express middleware in koa | ||
Use [Express](https://github.com/strongloop/express)/[Connect](https://github.com/senchalabs/connect) middleware with Koa. | ||
# Install | ||
## Warning | ||
It is **highly** recommended to use a Koa-specific middleware instead of trying to convert an Express version when they're available. There is a non-trivial difference in the Koa and Express designs and you will inevitably run into some issues. This module is a workaround for the specific cases where the differences can be ignored. Additionally, it also enables library authors to write 1 version of their HTTP middleware. | ||
```bash | ||
npm install koa-connect | ||
### Always use `next` | ||
Express middlewares need to declare and invoke the `next` callback appropriately for the koa-connect integration to work correctly. | ||
### For library authors | ||
If you're attempting to write a framework-agnostic middleware library, be sure to use only core HTTP methods and not any Express-dependent APIs like `res.send`. | ||
## Installation | ||
```sh | ||
npm install koa-connect@next | ||
``` | ||
# Usage: | ||
## Usage | ||
See `examples/` for more real-world examples. | ||
```javascript | ||
var koa = require('koa'); | ||
var c2k = require('koa-connect'); | ||
var app = koa(); | ||
const Koa = require('koa') | ||
const c2k = require('koa-connect') | ||
function middleware (req, res, next) { | ||
console.log('connect'); | ||
next(); | ||
// A generic Express-style middleware function | ||
function connectMiddlware (req, res, next) { | ||
res.writeHead(200, {'Content-Type': 'text/plain'}) | ||
res.end('From the Connect middleware') | ||
next() | ||
} | ||
app.use(c2k(middleware)); | ||
// A generic Koa v2 middlware, without async/await | ||
function koaMiddlware(ctx, next) { | ||
next() | ||
.then(() => { | ||
// The control flow will bubble back to here, like usual | ||
}) | ||
.catch((err) => { | ||
// Error handling from downstream middleware, like usual | ||
}) | ||
} | ||
app.use(function * () { | ||
this.body = 'koa'; | ||
}); | ||
// A generic Koa v2 middlware with async/await | ||
async function koaMiddleware(ctx, next) { | ||
try { | ||
await next(); | ||
} catch (e) { | ||
// Normal error handling | ||
} | ||
// Normal control flow | ||
} | ||
app.listen(3000); | ||
const app = new Koa() | ||
app.use(koaMiddlware) | ||
app.use(c2k(connectMiddlware)) | ||
app.use((ctx, next) => { | ||
console.log('It will continue on to here') | ||
}) | ||
app.listen(3000) | ||
``` | ||
## Testing | ||
Tests are in `tests.js` and are made with the [Mocha](https://mochajs.org) framework. You can run them with `npm test` or `npm run test:watch` | ||
# License | ||
MIT | ||
## License | ||
MIT |
Sorry, the diff of this file is not supported yet
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
New author
Supply chain riskA new npm collaborator published a version of the package for the first time. New collaborators are usually benign additions to a project, but do indicate a change to the security surface area of a package.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
No repository
Supply chain riskPackage does not have a linked source code repository. Without this field, a package will have no reference to the location of the source code use to generate the package.
Found 1 instance in 1 package
11011
0
11
293
70
3
2
- Removedconnect@^2.25.7
- Removedaccepts@1.2.131.3.8(transitive)
- Removedbase64-url@1.2.1(transitive)
- Removedbasic-auth@1.0.4(transitive)
- Removedbasic-auth-connect@1.0.0(transitive)
- Removedbatch@0.5.3(transitive)
- Removedbody-parser@1.13.3(transitive)
- Removedbytes@2.1.02.4.0(transitive)
- Removedcompressible@2.0.18(transitive)
- Removedcompression@1.5.2(transitive)
- Removedconnect@2.30.2(transitive)
- Removedconnect-timeout@1.6.2(transitive)
- Removedcontent-type@1.0.5(transitive)
- Removedcookie@0.1.3(transitive)
- Removedcookie-parser@1.3.5(transitive)
- Removedcookie-signature@1.0.6(transitive)
- Removedcore-util-is@1.0.3(transitive)
- Removedcrc@3.3.0(transitive)
- Removedcsrf@3.0.6(transitive)
- Removedcsurf@1.8.3(transitive)
- Removeddebug@2.2.02.6.9(transitive)
- Removeddepd@1.0.11.1.2(transitive)
- Removeddestroy@1.0.4(transitive)
- Removedee-first@1.1.1(transitive)
- Removederrorhandler@1.4.3(transitive)
- Removedescape-html@1.0.21.0.3(transitive)
- Removedetag@1.7.0(transitive)
- Removedexpress-session@1.11.3(transitive)
- Removedfinalhandler@0.4.0(transitive)
- Removedfresh@0.3.0(transitive)
- Removedhttp-errors@1.3.1(transitive)
- Removediconv-lite@0.4.110.4.13(transitive)
- Removedinherits@2.0.4(transitive)
- Removedisarray@0.0.1(transitive)
- Removedmedia-typer@0.3.0(transitive)
- Removedmethod-override@2.3.10(transitive)
- Removedmethods@1.1.2(transitive)
- Removedmime@1.3.4(transitive)
- Removedmime-db@1.52.01.53.0(transitive)
- Removedmime-types@2.1.35(transitive)
- Removedmorgan@1.6.1(transitive)
- Removedms@0.7.10.7.22.0.0(transitive)
- Removedmultiparty@3.3.2(transitive)
- Removednegotiator@0.5.30.6.3(transitive)
- Removedon-finished@2.3.0(transitive)
- Removedon-headers@1.0.2(transitive)
- Removedparseurl@1.3.3(transitive)
- Removedpause@0.1.0(transitive)
- Removedqs@4.0.0(transitive)
- Removedrandom-bytes@1.0.0(transitive)
- Removedrange-parser@1.0.3(transitive)
- Removedraw-body@2.1.7(transitive)
- Removedreadable-stream@1.1.14(transitive)
- Removedresponse-time@2.3.2(transitive)
- Removedrndm@1.2.0(transitive)
- Removedsend@0.13.2(transitive)
- Removedserve-favicon@2.3.2(transitive)
- Removedserve-index@1.7.3(transitive)
- Removedserve-static@1.10.3(transitive)
- Removedstatuses@1.2.11.5.0(transitive)
- Removedstream-counter@0.2.0(transitive)
- Removedstring_decoder@0.10.31(transitive)
- Removedtsscmp@1.0.5(transitive)
- Removedtype-is@1.6.18(transitive)
- Removeduid-safe@2.0.02.1.4(transitive)
- Removedunpipe@1.0.0(transitive)
- Removedutils-merge@1.0.0(transitive)
- Removedvary@1.0.11.1.2(transitive)
- Removedvhost@3.0.2(transitive)