koajs / koa Goto Github PK
View Code? Open in Web Editor NEWExpressive middleware for node.js using ES2017 async functions
Home Page: https://koajs.com
License: MIT License
Expressive middleware for node.js using ES2017 async functions
Home Page: https://koajs.com
License: MIT License
In general I don't like this for the average use-case and "hot" methods, but I do prefer this.request.etag
to this.get('ETag')
, this.request.length
, this.response.length
, this.response.header
etc, but the common cases we have would delegate: this.body = foo
== this.response.body = foo
. something to think about
more common shit, all as wrappers for vanilla node libs when appropriate.
or similar, less ugly name would be nice but meh
need to look into this, some errors aren't being caught
with some design decisions etc
add tests, content-typ, content-length, transfer-encoding
https://github.com/koajs/koa/blob/master/lib/application.js#L62 currently returning server.listen()
, thoughts?
in libs but add a few methods here, so common
so shit doesn't explode
would be nice if koa didn't touch the original req/res. since we're building a wrapper around them, i don't see why it would be necessary.
example is:
/**
* Set request URL.
*
* @api public
*/
set url(val) {
this.req.url = val;
},
Wish it were something else like:
get url() {
return this._url || this.req.url
},
set url(val) {
this._url = val
}
app.keys = new Keygrip
or sth
such as https://github.com/senchalabs/connect/blob/master/lib/utils.js#L61
so you can do something like
this.error(404)
vs.
var err = new Error()
err.status = 404
this.error(err)
or, another way to say it is to convert the body to a respondable type: buffer, stream, or string. generally, this should only be used in upstream middleware. we can make it private so people don't abuse it.
this way, we can avoid doing: https://github.com/koajs/compress/blob/master/index.js#L69
since we will have app.context()
, app.request()
, and app.response()
, i guess we should have something like app.mixin()
where you can do:
app.mixin({
context: {},
request: {},
response: {}
})
so you can do with a plugin:
app.mixin(require('koa-context-something'))
maybe app.plugin()
. maybe a different, better name. also, an app.inherit(parentapp)
would be nice as well, especially if you mount apps.
not sure what's up with this, it wont let me edit the home page https://github.com/koajs/koa/wiki
if we end up going with the dispatcher this will be simple
seems like we can't really wrap just one stream so we may want to consider this, knocks a good 1000rps off but eh. seems a little tricky to do with middleware since we have to terminate it lower, similar issue to the compress middleware
instead of yield next
? so used to next() in connect that it mind-fucks me a bit
will do this after #67
does basic auth really need to be in core?
this.response.lastModified = Date()
- since i'm too lazy to do this.set('Last-Modified', new Date().toUTCString())
. plus we can normalize people's date strings.this.response.etag = '12345'
- wrap the etag in "
s if not already.this.response.link()
this.response.location()
most of the other stuff i can think of are already handled by higher level stuff. or people won't use. if you don't have any opinions on these, i will implement them after you implement this.response
and this.request
.
would be more organized
right now, app.onerror
is added to the the error
event listener automatically. what happens if users don't want to use it? doing app.removeListener('event', app.onerror
)` is a little annoying. instead i suggest the following:
app.onerror
app.outputErrors
app.callback()
stage, warn/throw if no event listeners have been addedapp.callback = function(){
// ...
if (!app.listeners('error')) {
if (this.env === 'development') {
console.warn('You should add your own error handler.');
app.on('error', function(err) {
console.error(err.stack);
})
} else if (this.env !== 'test') {
throw new Error('Add your own error handler!');
}
}
return function(req, res){
// ..
})
Like this
app.use(function *(next) {
var start = new Date;
yield next;
var ms = new Date - start;
console.log('%s %s - %s', this.method, this.url, ms);
});
Is there a reason for that?
no one remembers to do this by default and node explodes
instanceof Stream is lame
since we kind of expect developers to attach their own properties to context
, it may be nice to warn when a property is overwritten. this is to avoid conflicts with different plugins/extensions/etc. we can also do something like app.context(obj, dontWarnMe)
where dontWarnMe
is a Boolean
and default true
during development.
i personally don't like qs. would be nice if you removed it as a dep and used the native querystring
module in core, then moved qs to a separate repo.
maybe
when header isn't sent
so it has the same middleware signature as connect/express
update the year to 2013. Also, you should add the repository field to package.json.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.