Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Only Get works with Koa #37

Closed
ss108 opened this issue Oct 4, 2016 · 4 comments
Closed

Only Get works with Koa #37

ss108 opened this issue Oct 4, 2016 · 4 comments

Comments

@ss108
Copy link

ss108 commented Oct 4, 2016

Hi,

I was very happy to come across this project, and tried to switch my Koa 2.0 app to use it. Turns out that any endpoint that is not a GET just hangs and times out.

@JsonController("/api/analytics")
@UseBefore(myAuthMiddleware())
export default class AnalyticsAPIController {
    @Post("/")
    async noworks(){
        return {yes: "hi"};
    }

    @Get("/")
    async works(){
        return {yes: "hi"};
    }
}

Here is an example of a controller that works:

@JsonController("/api/clients")
export default class ClientsAPIController {
    @Get("/")
    @UseBefore(myAuthMiddlware())
    async getAll(ctx) : Promise<any[]> {
        let res = await clients.logic.getAll();
        return res;
    }

    @Get("/:clientId")
    async get(@Param("clientId") clientId: number) : Promise<any> {
        let client = await clients.logic.get(clientId);
        return client;
    }
}

I'd love to help contribute to this project as well; if you could try to point me in the direction of where you think the error is in the source code, I could take a look/stab.

@pleerock
Copy link
Contributor

pleerock commented Oct 5, 2016

it should work because there are tests and they all are passing for post and other methods with both express and koa. Also I just checked it with simple example and it seems to work fine. Can you create a minimal example of project with koa, use this sample and check if it works?

@ss108
Copy link
Author

ss108 commented Oct 12, 2016

Hmm yes, I created a small project and this code works:

@JsonController("/api/widgets")
export default class WidgetsAPIController {
    @Get("/:id")
    async get(@Param("id") id: number): Promise<Widget> {
        let all: Widget[] = _getAll();

        let widget: Widget = all.filter((w) => {
            return w.id === id;
        })[0];

        // ctx.body = widget;
        return widget;
    }

    @Post("/")
    async create(ctx) {
        //    ctx.body = ""; 
        return "";
    }
}

I don't know what is different aside from the fact that I am not using middlware--but even when I don't use middleware with that other controller, it doesn't work. I will experiment with it a bit.

Also curious as to whether it is possible to access the context in a JsonController--what if I use middleware to store the current user on there, or on ctx.session, and need to access it in a controller action?

@ss108
Copy link
Author

ss108 commented Oct 12, 2016

Ok, so the problem was that I was using the bodyParser middleware from koa-better-body globally, and I guess this must have conflicted with the use of koa-body by this library behind the scenes.

@github-actions
Copy link

This issue has been automatically locked since there has not been any recent activity after it was closed. Please open a new issue for related bugs.

@github-actions github-actions bot locked as resolved and limited conversation to collaborators Dec 17, 2020
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Development

No branches or pull requests

2 participants