私はNodejsとExpressjsを初めて使用しています。私は、アプリケーションを中断することなく、バックグラウンドでスクリプトを継続的に実行させることを考えています。多くのスケジューリングNodeJsモジュール(ノードスケジューリング、後のものなど)がありますが、私はそれらをExpressJsアプリケーションに組み込む方法を理解できませんでした。ノードスケジュールモジュールをexpressjsアプリケーションに追加する方法
このモジュール以外にも、このモジュールを含める必要があります。アプリケーションレベルまたはルーターで実行します。
私は環境が問題ではないことを願って、Windows 7 32ビットボックスでこのアプリケーションを実行しています。
私はYeoman Generatorを使用してExpressJs Appを作成しました。ジェネレータによって生成されたファイルからコードをコピーして貼り付けます。このコントローラFiの後
config.jsの
var path = require('path'),
rootPath = path.normalize(__dirname + '/..'),
env = process.env.NODE_ENV || 'development';
var config = {
development: {
root: rootPath,
app: {
name: 'nodejswebsocketapp'
},
port: process.env.PORT || 3000,
},
test: {
root: rootPath,
app: {
name: 'nodejswebsocketapp'
},
port: process.env.PORT || 3000,
},
production: {
root: rootPath,
app: {
name: 'nodejswebsocketapp'
},
port: process.env.PORT || 3000,
}
};
module.exports = config[env];
express.js
var express = require('express');
var glob = require('glob');
var favicon = require('serve-favicon');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
var compress = require('compression');
var methodOverride = require('method-override');
var allowCrossDomain = function(req, res, next) {
res.header('Access-Control-Allow-Origin', '*');
res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE');
res.header('Access-Control-Allow-Headers', 'X-Requested-With, Content-Type');
next();
}
module.exports = function(app, config) {
var env = process.env.NODE_ENV || 'development';
app.locals.ENV = env;
app.locals.ENV_DEVELOPMENT = env == 'development';
app.set('views', config.root + '/app/views');
app.set('view engine', 'jade');
// app.use(favicon(config.root + '/public/img/favicon.ico'));
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({
extended: true
}));
app.use(cookieParser());
app.use(compress());
app.use(express.static(config.root + '/public'));
app.use(methodOverride());
app.use(allowCrossDomain);
var controllers = glob.sync(config.root + '/app/controllers/*.js');
controllers.forEach(function (controller) {
require(controller)(app);
});
app.use(function (req, res, next) {
var err = new Error('Not Found');
err.status = 404;
next(err);
});
if(app.get('env') === 'development'){
app.use(function (err, req, res, next) {
res.status(err.status || 500);
res.render('error', {
message: err.message,
error: err,
title: 'error'
});
});
}
app.use(function (err, req, res, next) {
res.status(err.status || 500);
res.render('error', {
message: err.message,
error: {},
title: 'error'
});
});
};
app.js
var express = require('express');
var config = require('./config/config');
var app = express();
var expressWs = require('express-ws')(app);
require('./config/express')(app, config);
app.listen(config.port, function() {
console.log('Express server listening on port ' + config.port);
});
ル私は scheduleTaskController.js何にURL '/スケジュール' 利回りを叩く
var express = require('express'),
router = express.Router(),
schedule = require('node-schedule');
module.exports = function (app) {
app.use('/', router);
app.use('/schedule', router);
};
router.get('/schedule', function (req, res, next) {
console.log(schedule.RecurrenceRule());
var rule = new schedule.RecurrenceRule();
rule.second = 30;
schedule.scheduleJob(rule, function(){
console.log(new Date(), 'The 30th second of the minute.');
});
});
を作成していること。ブラウザではなく、console.logの結果を期待しているコマンドプロンプトには表示されません。
私は自分のコードに何も問題がないことを理解しました。ノードスケジュールモジュールの仕組みを理解できませんでした。 'rule.second = 30;'は、関数が30秒ごとに実行されるのではなく、毎分30秒に実行されることを意味します。 – Rajkaran07