Ich bin neu in Nodejs und Expressjs. Ich denke daran, ein Skript im Hintergrund laufen zu lassen, ohne die Anwendung zu unterbrechen. Es gibt viele NodeJ-Module (wie zB Node-Scheduling, etc.), aber ich konnte nicht herausfinden, wie ich sie in meine ExpressJs-App einbinden kann.Wie node-schedule Modul zur expressjs App hinzufügen
Abgesehen davon, wo ich dieses Modul enthalten sollte; auf Anwendungsebene oder am Router.
Ich hoffe Umgebung ist kein Problem, ich bin diese App auf Windows 7 32-Bit-Box ausgeführt.
Ich habe Yeoman Generator verwendet, um ExpressJs App zu erstellen. Kopieren und Einfügen von Code aus den generierten Dateien.
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);
});
Diese Nachdem eine Steuerung fi le, die ich scheduleTaskController.js erstellt
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.');
});
});
Schlagen der URL '/ Zeitplan' Erträge in nichts. nicht im Browser und nicht in der Eingabeaufforderung, wo ich Ergebnis von console.log erwarte.
Ich fand heraus, dass mit meinem Code nichts falsch ist. Ich habe nicht verstanden, wie das Knotenplan-Modul funktioniert. 'rule.second = 30;' bedeutet, dass die Funktion in der 30. Sekunde jeder Minute ausgeführt wird und nicht alle 30 Sekunden. – Rajkaran07