You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
54 lines
1.3 KiB
JavaScript
54 lines
1.3 KiB
JavaScript
8 months ago
|
var path = require('path'),
|
||
|
util = require('util'),
|
||
|
querystring = require('querystring'),
|
||
|
child_process = require('child_process');
|
||
|
|
||
|
var engine = function (filePath, opts, callback) {
|
||
|
var binPath = this.binPath,
|
||
|
runnerPath = this.runnerPath,
|
||
|
displayErrors = this.displayErrors,
|
||
|
|
||
|
method = opts.method || 'GET',
|
||
|
get = opts.get || {},
|
||
|
post = opts.post || {},
|
||
|
|
||
|
query = opts.query || querystring.stringify(get),
|
||
|
body = opts.body || querystring.stringify(post),
|
||
|
|
||
|
env = {
|
||
|
REQUEST_METHOD: method,
|
||
|
CONTENT_LENGTH: body.length,
|
||
|
QUERY_STRING: query
|
||
|
};
|
||
|
|
||
|
var command = util.format(
|
||
|
'%s %s %s %s',
|
||
|
(body ? util.format('echo "%s" | ', body) : '') + binPath,
|
||
|
runnerPath,
|
||
|
path.dirname(filePath),
|
||
|
filePath
|
||
|
);
|
||
|
|
||
|
child_process.exec(command,{
|
||
|
env: env
|
||
|
}, function (error, stdout, stderr) {
|
||
|
if (error) {
|
||
|
|
||
|
// can leak server configuration
|
||
|
if (displayErrors && stdout) {
|
||
|
callback(stdout);
|
||
|
} else {
|
||
|
callback(error);
|
||
|
}
|
||
|
} else if (stdout) {
|
||
|
callback(null, stdout);
|
||
|
} else if (stderr) {
|
||
|
callback(stderr);
|
||
|
} else {
|
||
|
callback(null, null);
|
||
|
}
|
||
|
});
|
||
|
};
|
||
|
|
||
|
module.exports = engine;
|