同时运行json-server和node脚本

这是如何在节点中编程的一个非常糟糕的例子。 我试图search一个状态的用户的XML数据库,然后输出到JSON的JSON服务器使用。 但是,当使用npm或npm-run-all时,脚本不会很好。

如果我从命令行运行它将运行良好。 它将运行正常,如果我dockertize文件。

当我尝试运行docker-compose时,它实际上并不运行这个脚本,它会尝试但是说“Data Completed”和Json-server运行。 cronjob运行得像它应该的,因为我得到“数据完成”。 它永远不会抓住XML并转换成JSON。 这是我所需要的json服务器。 因此,我只是从json:server获取默认的模拟数据。

为什么这不会抓取数据并将其转换为像我期望的JSON文件? 我是新的节点/ JavaScript。

谢谢。

const express = require('express'); const expressGraphQL = require('express-graphql'); const schema = require('./schema/schema'); const bodyParser = require('body-parser'); var CronJob = require('cron').CronJob; var Nightmare = require('nightmare'); require('nightmare-inline-download')(Nightmare); var fs = require('fs'); var nightmare = Nightmare({ switches: { 'ignore-certificate-errors': true, 'show': true } }); //libs for json conversion xml2js = require('xml2js'); var util = require('util') var path = require('path'); const app = express(); // app.use('/graphql', expressGraphQL({ // schema, // graphiql: true // })); // // app.use(bodyParser.json()); // app.listen(process.env.port || 4000, () => { // console.log('Listening'); // }); process.on('SIGTERM', function() { console.log('\ncaught SIGTERM, stopping gracefully'); process.exit(1); }); console.log('launched'); process.stdin.resume(); app.get('/refresh', function(req, res) { res.send(job1.start()); console.log(req + res + "Job 1 started") }) const STATE = process.env.state || "AR"; const TIME = process.env.time || 1 * 10000; console.log('STATE: ' + STATE); console.log('TIME: ' + TIME); const savejson = __dirname + '/latest.json'; const savexml = __dirname + '/latest.json'; var job1 = new CronJob({ cronTime: '*/15 * * * *', onTick: function() { nightmare.goto('https://google.com/somethingthatwilloutputxml').type('#city', STATE).type('#outtype', 'XML').click('#submitpanel1').wait('#webkit-xml-viewer-source-xml').evaluate(() => document.querySelector('#webkit-xml-viewer-source-xml').innerHTML).then((result) => { console.log(result) fs.writeFileSync(savexml, result); }).then(() => { xmlFileToJs("latest.json", function(err, obj) { var jsonStr = '{"employees":[]}'; var object = JSON.parse(jsonStr); for (var prop in obj.VFPData.temp) { var data = obj.VFPData.temp[prop]; object['employees'].push({ id: parseInt(prop).toString(), firstname: data.firstname, lastname: data.lastname, name: data.name, fullname: data.fullname, organization: data.ofcdesc, email: data.inet, voice: data.voice, cellphone: data.pp_cell, reportTo: data.rptto, fax: data.fax, bd_name: data.bd_name, bd_address: data.bd_address, bd_city: data.bd_city, bd_state: data.bd_state, bd_zip: data.bd_zip, bd_room: data.room, appointed: data.appointed, formltitle: data.formltitle }); } jsonStr = JSON.stringify(object, null, 2); console.log(jsonStr) fs.writeFile(savejson, jsonStr, function(err) { if (err) { console.log(err); } else { console.log("JSON saved to " + savejson); return 0 } }); if (err) throw(err); jsToXmlFile('latest2.xml', obj, function(err) { if (err) console.log(err); } ) }); }).catch((error) => { console.error('Search failed:', error); }); function xmlFileToJs(filename, cb) { var filepath = path.normalize(path.join(__dirname, filename)); fs.readFile(filepath, 'utf8', function(err, xmlStr) { if (err) throw(err); xml2js.parseString(xmlStr, { ignoreAttrs: true, mergeAttrs: true, emptyTag: null, explicitArray: false, trim: true, normalize: true, preserveChildrenOrder: true, async: true }, cb); }); } console.log("Data Completed") }, start: true, runOnInit: true, onComplete: function() { console.log("Completed") }, timeZone: 'America/Chicago' });