簡體   English   中英

在NodeJS服務器的后台運行Javascript函數

[英]Run Javascript function in background of NodeJS server

我編寫了一個函數,該函數會定期檢查所連接的android設備的電池狀態並返回一個數組。 如何在服務器啟動時運行此功能,並在將其信息提供給其他頁面時使其連續運行?

var minutes = 1, the_interval = minutes * 60 * 500;
setInterval(function() {
adb.devices().then(function(devices) {

    var promises = new Array();

    for (var i = 0; i < devices.length; i++){
        promises.push(adb.checkBattery(devices[i]));
    }

    Promise.all(promises).then(function(availableDevices) {
        console.log('Updated:');
        console.log(availableDevices);
        return availableDevices;
    });
});
}, the_interval);

這是我的app.js文件,當我打開一個新項目時會自動創建它。 我為創建的各種路由添加了app.use。

var express = require('express');
var path = require('path');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
var multer = require('multer');
var adb     = require('./adb.js');

var index = require('./routes/index');
var users = require('./routes/users');
var devices = require('./routes/devices');
var openBrowser = require('./routes/openBrowser');
var closeBrowser = require('./routes/closeBrowser');
var openApp = require('./routes/openApp');
var closeApp = require('./routes/closeApp');
var install = require('./routes/install');
var uninstall = require('./routes/uninstall');
var pull = require('./routes/pull');
var push = require('./routes/push');
var battery = require('./routes/battery');


var app = express();

// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');

// uncomment after placing your favicon in /public
//app.use(favicon(path.join(__dirname, 'public', 'favicon.ico')));
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));

app.use('/', index);
app.use('/users', users);
app.use('/devices', devices);
app.use('/openBrowser', openBrowser);
app.use('/openApp', openApp);
app.use('/closeApp', closeApp);
app.use('/install', install);
app.use('/closeBrowser', closeBrowser);
app.use('/uninstall', uninstall);
app.use('/pull', pull);
app.use('/push', push);
app.use('/battery', battery);

// 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;

使用快遞,如果我理解正確,則應在一定間隔內運行它:

var express = require('express');
var app = express();

app.listen(3000, function () {
    yourFunction();
    setInterval(yourFunction, << period in ms >>);
});

function yourFunction()
{
    << your code >>
}

如果您想使用對某些請求做出響應的功能,則最好使用中間件:

var express = require('express');
var app = express();

app.use(function(req,res) {
    if(condition)
        yourFunction();
})

app.listen(3000, function () {
});

function yourFunction()
{
    << your code >>
}

屏幕快照根據您可以使用的文檔

server = app.listen(3000, function () {
});

server.on('listening', () => {
   your function()
})

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM