Coder Social home page Coder Social logo

koa's Issues

warn if app.context() overwrites another property during development

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.

more convenience properties

  • 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.

yield down

instead of yield next? so used to next() in connect that it mind-fucks me a bit

app error handling improvements

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:

  • remove app.onerror
  • remove app.outputErrors
  • at the app.callback() stage, warn/throw if no event listeners have been added
  • automatically add the default listener in development
app.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){
  // ..
})

app.mixin()

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.

remove qs dependency

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.

basic auth

does basic auth really need to be in core?

Why not app.use(generator) ?

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?

FAQ

with some design decisions etc

consider delegating to ctx.request / ctx.response

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

moar middleware

more common shit, all as wrappers for vanilla node libs when appropriate.

  • common logger
  • compression
  • cookie session
  • db session
  • conditional get
  • jsonp
  • etag
  • directory
  • csrf protection
  • request limits
  • rate limiting
  • favicon
  • methodOverride
  • basicAuth
  • route
  • domains
  • static
  • timeout

LICENSE?

update the year to 2013. Also, you should add the repository field to package.json.

consider domain support (optional?)

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

don't touch original req/res

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
  }

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.