Archived
2

added workaround for 'added' field compatible to MongoDB 3.6

This commit is contained in:
VLE2FE 2020-07-10 09:42:05 +02:00
parent f41498da53
commit 523b2c9b68
4 changed files with 28 additions and 5 deletions

View File

@ -3,7 +3,7 @@ applications:
- name: definma-api - name: definma-api
path: dist/ path: dist/
instances: 1 instances: 1
memory: 512M memory: 1024M
stack: cflinuxfs3 stack: cflinuxfs3
buildpacks: buildpacks:
- nodejs_buildpack - nodejs_buildpack

View File

@ -9,7 +9,7 @@
"build": "build.bat", "build": "build.bat",
"build-push": "build.bat && cf push", "build-push": "build.bat && cf push",
"test": "mocha dist/**/**.spec.js", "test": "mocha dist/**/**.spec.js",
"start": "sleep 5s && node index.js", "start": "node index.js",
"dev": "nodemon -e ts,yaml --exec \"tsc && node dist/index.js || exit 1\"", "dev": "nodemon -e ts,yaml --exec \"tsc && node dist/index.js || exit 1\"",
"loadDev": "node dist/test/loadDev.js", "loadDev": "node dist/test/loadDev.js",
"coverage": "tsc && nyc --reporter=html --reporter=text mocha dist/**/**.spec.js --timeout 5000", "coverage": "tsc && nyc --reporter=html --reporter=text mocha dist/**/**.spec.js --timeout 5000",

View File

@ -47,10 +47,15 @@ export default class db {
if (err) done(err); if (err) done(err);
}); });
mongoose.connection.on('error', console.error.bind(console, 'connection error:')); mongoose.connection.on('error', console.error.bind(console, 'connection error:'));
mongoose.connection.on('connected', () => { // evaluation connection behaviour on prod
if (process.env.NODE_ENV !== 'test') { // Do not interfere with testing
console.info('Database connected');
}
});
mongoose.connection.on('disconnected', () => { // reset state on disconnect mongoose.connection.on('disconnected', () => { // reset state on disconnect
if (process.env.NODE_ENV !== 'test') { // Do not interfere with testing if (process.env.NODE_ENV !== 'test') { // Do not interfere with testing
console.info('Database disconnected'); console.info('Database disconnected');
this.state.db = 0; // this.state.db = 0; // prod database connects and disconnects automatically
} }
}); });
process.on('SIGINT', () => { // close connection when app is terminated process.on('SIGINT', () => { // close connection when app is terminated

View File

@ -256,7 +256,7 @@ router.get('/samples', async (req, res, next) => {
// projection.added = {$toDate: '$_id'}; // projection.added = {$toDate: '$_id'};
// projection.added = { $convert: { input: '$_id', to: "date" } } // TODO: upgrade MongoDB version or find alternative // projection.added = { $convert: { input: '$_id', to: "date" } } // TODO: upgrade MongoDB version or find alternative
} }
if (!(filters.fields.indexOf('_id') >= 0)) { // disable _id explicitly if (filters.fields.indexOf('_id') < 0 && filters.fields.indexOf('added') < 0) { // disable _id explicitly
projection._id = false; projection._id = false;
} }
queryPtr.push({$project: projection}); queryPtr.push({$project: projection});
@ -266,8 +266,18 @@ router.get('/samples', async (req, res, next) => {
if (err) return next(err); if (err) return next(err);
if (data[0].count) { if (data[0].count) {
res.header('x-total-items', data[0].count.length > 0 ? data[0].count[0].count : 0); res.header('x-total-items', data[0].count.length > 0 ? data[0].count[0].count : 0);
res.header('Access-Control-Expose-Headers', 'x-total-items');
data = data[0].samples; data = data[0].samples;
} }
if (filters.fields.indexOf('added') >= 0) { // add added date
data.map(e => {
e.added = e._id.getTimestamp();
if (filters.fields.indexOf('_id') < 0) {
delete e._id;
}
return e
});
}
if (filters['to-page'] < 0) { if (filters['to-page'] < 0) {
data.reverse(); data.reverse();
} }
@ -289,7 +299,15 @@ router.get('/samples', async (req, res, next) => {
res.write('['); res.write('[');
let count = 0; let count = 0;
const stream = collection.aggregate(query).cursor().exec(); const stream = collection.aggregate(query).cursor().exec();
stream.on('data', data => { res.write((count === 0 ? '' : ',\n') + JSON.stringify(data)); count ++; }); stream.on('data', data => {
if (filters.fields.indexOf('added') >= 0) { // add added date
data.added = data._id.getTimestamp();
if (filters.fields.indexOf('_id') < 0) {
delete data._id;
}
}
res.write((count === 0 ? '' : ',\n') + JSON.stringify(data)); count ++;
});
stream.on('close', () => { stream.on('close', () => {
res.write(']'); res.write(']');
res.end(); res.end();