mirror of
https://github.com/josdejong/mathjs.git
synced 2025-12-08 19:46:04 +00:00
80 lines
1.9 KiB
JavaScript
80 lines
1.9 KiB
JavaScript
/**
|
|
* This example demonstrates how to run math.js in a child process with limited
|
|
* execution time.
|
|
*
|
|
* Prerequisites:
|
|
*
|
|
* npm install express workerpool
|
|
*
|
|
* Start the server:
|
|
*
|
|
* node ./server.js
|
|
*
|
|
* Make a request to the server:
|
|
*
|
|
* GET http://localhost:8080/mathjs?expr=sqrt(16)
|
|
*
|
|
* Note that the query parameter `expr` should be properly url encoded.
|
|
*/
|
|
|
|
try {
|
|
var express = require('express');
|
|
var workerpool = require('workerpool');
|
|
}
|
|
catch (err) {
|
|
console.log('Error: To run this example, install express and workerpool first via:\n\n' +
|
|
' npm install express workerpool\n');
|
|
process.exit();
|
|
}
|
|
|
|
var app = express();
|
|
var pool = workerpool.pool(__dirname + '/math_worker.js');
|
|
|
|
var TIMEOUT = 10000; // milliseconds
|
|
|
|
/**
|
|
* GET /mathjs?expr=...
|
|
*/
|
|
app.get('/mathjs', function (req, res) {
|
|
var expr = req.query.expr;
|
|
if (expr === undefined) {
|
|
return res.status(400).send('Error: Required query parameter "expr" missing in url.');
|
|
}
|
|
|
|
pool.exec('evaluate', [expr])
|
|
.timeout(TIMEOUT)
|
|
.then(function (result) {
|
|
res.send(result);
|
|
})
|
|
.catch(function (err) {
|
|
res.status(400).send(formatError(err));
|
|
});
|
|
});
|
|
|
|
/**
|
|
* Format error messages as string
|
|
* @param {Error} err
|
|
* @return {String} message
|
|
*/
|
|
function formatError (err) {
|
|
if (err instanceof workerpool.Promise.TimeoutError) {
|
|
return 'TimeoutError: Evaluation exceeded maximum duration of ' + TIMEOUT / 1000 + ' seconds';
|
|
}
|
|
else {
|
|
return err.toString();
|
|
}
|
|
}
|
|
|
|
// handle uncaught exceptions so the application cannot crash
|
|
process.on('uncaughtException', function(err) {
|
|
console.log('Caught exception: ' + err);
|
|
console.trace();
|
|
});
|
|
|
|
// start the server
|
|
var PORT = process.env.PORT || 8080;
|
|
app.listen(PORT, function() {
|
|
console.log('Listening at http://localhost:' + PORT);
|
|
console.log('Example request:\n GET http://localhost:' + PORT + '/mathjs?expr=sqrt(16)');
|
|
});
|