Можем ли мы проверить, получаем ли мы запрос POST с другого сервера? - PullRequest
0 голосов
/ 04 октября 2018

Я использую Express в Node JS и хочу проверить, нет ли запроса POST в течение 5 минут, чтобы я мог отправить уведомление.

Как мы решаем эту проблему?Может кто-нибудь, пожалуйста, предложите некоторые идеи.

app.post('/apidata', function (request, response) {
var data = new dbData(request.body)
data.save()
  .then(_item => {
    response.send('Saved data to Database')
  })
  .catch(_err => {
    response.status(400).send('Error while saving to Database. Contact Support.')
  })
})

Это мой пост запрос.Мне нужно проверить, вызывается ли этот API.Если он не вызывается более 5 минут, мне нужно отправить предупреждение.

Ответы [ 2 ]

0 голосов
/ 04 октября 2018

Вы можете написать middleware, что делает пользователя setTimeout, как показано ниже: -

function alertMiddleware(req, res, next) {
    clearTimeout(req.app.locals.alertTimerID);
    req.app.locals.alertTimerID = setTimeout(() => {
        console.log('your message');
    }, 60 * 1000 * 5);
    next();
}
app.post('/apidata', alertMiddleware, (req,res,next) => {
  //Your stuff here
});
0 голосов
/ 04 октября 2018

Конечно, вы можете отправить запрос обратно на ваш сервер, используя nodejs

step1: in your request method/function 

// everytime you receive request, save that time in database or in a file
//get current time in milliseconds

var timeInMss = new Date().getTime()
var fs = require('fs');
fs.writeFile("/tmp/lastrequest.txt", timeInMss , function(err) {
  if(err) {
    return console.log(err);
   }

   console.log("The request time was saved!");
});

Step2:
//setup cron job running every 5 minutes
// install node-cron using command npm install --save node-cron

var cron = require('node-cron');

cron.schedule('* * * * *', () => {
    console.log('running a task every minute');

   //first get last request time read from file  
   var fs = require('fs');

  fs.readFile("/tmp/lastrequest.txt", 'utf8', function(err, timedata) {
     //check the time in timedata data if it is more than 5 minutes   before current time, then send notification     });

   var http = require("http");

  var options = {
    host: 'youranotherserver',
  port: 80,
  path: '/serverpath',
   method: 'POST'
};

var req = http.request(options, function(res) {

  res.setEncoding('utf8');
  res.on('data', function (chunk) {

  });
});

req.on('error', function(e) {
  console.log('problem with request: ' + e.message);
   });

});

req.write('data\n');
req.write('data\n');
req.end();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...