Получить тело запроса POST в Moleculer

Я использую Fetch в ReactJs, чтобы отправить запрос в api Moleculer следующим образом:

 var data ={
            'ordername' : 'PUG',
            'receivername' : 'AnSama'
        }
        fetch(url,{
            method: 'POST',
            header: {              
                'Accept': 'application/json',
                'Content-Type': 'application/json',
              },
              body : data
        })
            .then(res => {return res.json()})
                .then(
                    (result) => {
                        alert(JSON.stringify(result));
                    },
                    (error) => {
                        alert('error');
                    }
                )

Затем я хочу получить тело запроса в Moleculer (Framework of NodeJS). Как я могу сделать?


person M.Quynh    schedule 09.03.2018    source источник


Ответы (2)


В Moleculer API Gateway тело JSON всегда анализируется и доступно через ctx.params. Если вы хотите отправить значения заголовков в службу, используйте onBeforeHook в настройках роутера.

broker.createService({
    mixins: [ApiService],
    settings: {
        routes: [
            {
                path: "/",
                onBeforeCall(ctx, route, req, res) {
                    // Set request headers to context meta
                    ctx.meta.userAgent = req.headers["user-agent"];
                }
            }
        ]
    }
});
person Icebob    schedule 09.04.2018

В дополнение к ответу @Icebob, если ваш процесс POST API запрашивает асинхронно (скорее всего, так и будет) и вернет обещание. Вот пример (вот как мы используем):

actions : {
    postAPI(ctx) {
        return new this.Promise((resolve, reject) => {
            svc.postdata(ctx, (err, res) => {
                if (err) {
                    reject(err);
                } else {
                    resolve(res);
                }
            });
        })
            .then((res) => {
                return res;
            }, (err) => {
                return err;
            });
    }
}
person Narendra Singh    schedule 06.07.2018