如何解决“多次拨打Api电话”的问题-一个非常奇怪的问题

时间:2019-04-17 05:39:11

标签: node.js api express routing

在我的API中,我使用的是nodeJS,expressJS。它是一个基于微服务的架构。我已使用express-generator创建此API。以下是我的路由结构。我有一个中间件和下面给出的常规路由。 “ *”用于正则表达式。

// routing goes here for the middleware
app.use('/api/*/', (req, res, next) => {
  // send it to middleware
  middleware.entry(req, res, next);
});

// rest of the routing goes here, after satisfying the access conditions from middleware
app.use('/api/*/review', reviewRouter);

以下是中间件输入代码。它会调用auth服务,并确认请求是否可以访问该路由。

const entry = async (req, res, next) => {
    try {
        // let's get the auth url
        const url = process.env.AUTH_URL + req.originalUrl;

        console.log('review: ', req.body);
        let response = {};

        switch (req.method) {
            case 'GET':
                response = await fetch.get(url, {
                    method: 'get',
                    headers: req.headers
                });
                break;
            case 'POST':
                response = await fetch.get(url, {
                    method: 'post',
                    headers: req.headers,
                    body: JSON.stringify(req.body)
                });
                break;
            case 'PUT':
                response = await fetch.get(url, {
                    method: 'put',
                    headers: req.headers,
                    body: JSON.stringify(req.body)
                });
                break;
            case 'DELETE':
                response = await fetch.get(url, {
                    method: 'delete',
                    headers: req.headers
                });
                break;
        }

        if (response.code === 200) {
            // we got the successful result, the access is good
            if (response.data.user) {
                req.user = response.data.user;
            }
            next();
        }
        else {
            // error
            const error = response.error;
            return responseHelper.error(res, error, error.code ? error.code : codes.ERROR);
        }
    }
    catch (error) {
        console.log('e: ', error);
        responseHelper.error(res, error, error.code ? error.code : codes.ERROR);
    }
};

回到问题所在。一切正常。这是一个产品,现在已经运行了大约一年。昨天,安装了一些更新后,我重新启动了服务器。在这之间,发生了一些事情,使api请求成倍增加。例如,当我调用/ api / shopping / review时,理想情况下,它应该向中间件提交1个请求。但是它正在向中间件提交大约200多个请求。真奇怪本节不知何故:

// routing goes here for the middleware
app.use('/api/*/', (req, res, next) => {
  // send it to middleware
  middleware.entry(req, res, next);
});

被触发了100次。它只发生过一次,重新启动后又恢复正常。但这让我想知道此请求重复性可能是什么问题。有人可以帮助我了解在什么情况下可以重现此行为吗?可能是什么问题?这很重要,因为如果我找不到这种行为背后的原因,那么一旦它再次困扰着我,则始终会对应用程序构成威胁。任何建议将不胜感激。

0 个答案:

没有答案