在Moleculer中获取正文POST请求

时间:2018-03-09 08:17:36

标签: node.js api request moleculer

我在ReactJs中使用Fetch向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(NodeJS的框架)中获取请求的主体。我能怎么做?

3 个答案:

答案 0 :(得分: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"];
                }
            }
        ]
    }
});

答案 1 :(得分:0)

除了@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;
            });
    }
}

答案 2 :(得分:-1)

我有同样的问题。如何在分子中获得BODY和HEADERS? 使用require时("分子");

我使用ReactJS的Fetch / Axios到Moleculer

 axios({
        url: url,
        method: 'POST',
        params: {
            username: this.state.user['username'],
            password: this.state.user['password'],
        },
        headers: ({
            'Accept': 'application/json',
            'Content-Type': 'application/json',
            'API_KEY': API_KEY.API_KEY,
            'CUSTOMER_KEY': API_KEY.CUSTOMER_KEY,
        }),
        withCredentials: true,
        credentials: 'include',
    }).then(res) => {})