Skip to content

DemoDataServer

Oli Sturm edited this page Aug 17, 2017 · 2 revisions

Here is the complete source code for a data server that uses devextreme-query-mongodb. The data in the MongoDB countries database has this format:

{"_id":{"$oid":"58060596392c9a92f2f86222"},"name":"American Samoa","areaKM2":199,"population":57880}
require('babel-polyfill');
const express = require('express');
const http = require('http');
const https = require('https');
const fs = require('fs');
const mongodb = require('mongodb');
const query = require('devextreme-query-mongodb');
const getOptions = require('devextreme-query-mongodb/options').getOptions;

const mongoUri = 'mongodb://localhost:27017/countries';

const app = express();
app.use(require('cors')());
app.use(require('morgan')('dev'));

function handleError(res, reason, message, code) {
  console.error('ERROR: ' + reason);
  res.status(code || 500).json({ error: message });
}

function getQueryOptions(req) {
  return getOptions(req.query, {
    areaKM2: 'int',
    population: 'int'
  });
}

async function getData(coll, req, res) {
  try {
    const options = getQueryOptions(req);
    if (options.errors.length > 0)
      console.error('Errors in query string: ', JSON.stringify(options.errors));

    const results = await query(
      coll,
      options.loadOptions,
      options.processingOptions
    );
    res.status(200).jsonp(results);
  } catch (err) {
    handleError(res, err, 'Failed to retrieve data');
  }
}

mongodb.MongoClient.connect(mongoUri, function(err, database) {
  if (err) {
    console.error(err);
    process.exit(1);
  }

  app.get('/countries', function(req, res) {
    getData(database.collection('countries'), req, res);
  });

  console.log('Database connection ready');

  const httpServer = http.createServer(app);
  httpServer.listen(process.env.HTTPPORT || 8080, function() {
    const port = httpServer.address().port;
    console.log('HTTP server running on port', port);
  });

  const httpsOptions = {
    key: fs.readFileSync('my-ssl-key'),
    cert: fs.readFileSync('my-ssl-cert')
  };
  const httpsServer = https.createServer(httpsOptions, app);
  httpsServer.listen(process.env.HTTPSPORT || 8081, function() {
    const port = httpsServer.address().port;
    console.log('HTTPS server running on port', port);
  });
});
Clone this wiki locally