2017-02-03 7 views
1

Прошло несколько дней, когда я начал изучать Node JS.Как реализовать задание cron (используя расписание узлов) в приложении Node JS

У моего приложения Node JS есть get api, который извлекает информацию из базы данных MongoDB в формате json при запуске URL-адреса http: // localhost: portnumber/mybooks.

В схеме книги есть четыре поля, а именно название, автор, категория и цена. Теперь я хочу представить работу cron, которая будет запускаться каждые 10 и 50 минут каждого часа. Он проверит, есть ли книга с ценой более 100 (валюта здесь не имеет значения), она удалит эту запись (или документ) из базы данных. Значит, он будет работать в 7:10 утра, 7:50, затем в следующий час в 8:10 и 8:50 и так далее.

Я запускаю свое приложение с командой ./bin/www из папки приложения. Тем не менее, я не могу понять, как реализовать эту службу заданий cron и где (в каком файле) поставить этот код, чтобы заставить его работать в указанное выше время всякий раз, когда я запускаю свое приложение.

Здесь я расскажу о битах кода моего так называемого разработанного приложения, чтобы вы могли посмотреть. В настоящее время он отлично работает для отдыха api.

Это app.js:

var express = require('express'); 
var path = require('path'); 
var bodyParser = require('body-parser'); 

var index = require('./routes/index'); 

var app = express(); 

app.use(bodyParser.json()); 
app.use(bodyParser.urlencoded({ extended: false })); 
app.use(express.static(path.join(__dirname, 'public'))); 

app.use('/', index); 

// catch 404 and forward to error handler 
app.use(function(req, res, next) { 
    var err = new Error('Not Found'); 
    err.status = 404; 
    next(err); 
}); 

// error handler 
app.use(function(err, req, res, next) { 
    // set locals, only providing error in development 
    res.locals.message = err.message; 
    res.locals.error = req.app.get('env') === 'development' ? err : {}; 

    // render the error page 
    res.status(err.status || 500); 
    res.render('error'); 
}); 


module.exports = app; 

Это index.js:

var express = require('express'); 
var router = express.Router(); 


var mongoose = require('mongoose'); 
var Book1 = require('../models/mybook.model'); 


var db = 'mongodb://localhost/mybookdb'; 
var mongoose = require('mongoose'); 
mongoose.connect(db); 

var conn = mongoose.connection; 

/* GET home page. */ 
router.get('/', function(req, res, next) { 
    res.render('index', { title: 'Express' }); 
}); 

router.get('/mybooks', function(req, res) { 
    console.log('Showing all books'); 
    Book1.find({}) 
    .exec(function(err,records){ 
     if(err){ 
      res.send('error has occured'); 
     }else{ 
      console.log(records); 
      res.json(records); 
     } 

    }); 

}); 

module.exports = router; 

и mybook.model как:

var mongoose = require('mongoose'); 
var Schema = mongoose.Schema; 

var BookSchema = new Schema({ 

title:String, 
author:String, 
category:String, 
price: Number 
}); 

module.exports = mongoose.model('Book', BookSchema); 

Может кто-нибудь помочь мне с тем, как и в каком файле для выполнения функции node-schedule cron выполнить мое требование?

ответ

2

Я мог бы выяснить, как это сделать. Я получил идею от https://www.npmjs.com/package/node-schedule.

Хотя это не точное решение, но рядом. В этом случае задание cron работает непрерывно в каждый момент, и удаление не выполняется. Код планировщика Cron можно поместить в index.js следующим образом:

var s = require('node-schedule');  
var j = schedule.scheduleJob('* * * * *', function() { 

Book1.find({price : {$gt:100}} , function(err, result) {  
    if(err) { 
    console.log(err); 
    } 
    else { 
    if(!result) { 
     console.log("No book found"); 
    } else {   
     console.log("Found a book with title "+result.title); 
    }   
    }  
}); 

Если кто-то может выполнить это с точным требованием будет helpful.Thanks.

 Смежные вопросы

  • Нет связанных вопросов^_^