Skip to content
Snippets Groups Projects
Commit 7827a077 authored by steven.liatti's avatar steven.liatti
Browse files

Adding simple Node.js api to retrieve data from database. All is in containers with docker-compose

parent 07d9e377
No related branches found
No related tags found
No related merge requests found
...@@ -17,4 +17,4 @@ show collections; ...@@ -17,4 +17,4 @@ show collections;
db.orders.find(); db.orders.find();
``` ```
Open api at http://localhost:8080/
node_modules
package-lock.json
\ No newline at end of file
FROM node:11
WORKDIR /home/nodejs/app
COPY . .
RUN npm install --production
CMD ["npm", "start"]
const u = require('./utils');
const MongoClient = require('mongodb').MongoClient;
const url = 'mongodb://mongo-orders:27017';
const dbName = 'order';
let db;
MongoClient.connect(url, function(err, client) {
if (err) {
console.log(err);
}
else {
console.log('Connected successfully to server');
db = client.db(dbName);
}
});
exports.byCustomerPseudo = (req, res) => {
u.logReq(req);
db.collection('orders').find({ 'customer.pseudo': { $eq: req.params.pseudo } }).toArray((err, docs) => {
if (err) {
console.log(err);
}
console.log(docs);
res.send(docs);
});
}
const u = require('./utils');
const queries = require('./queries');
const router = require('express').Router();
router.get('/hello', (req, res) => {
u.logReq(req);
res.send({ message: 'hello' });
});
router.get('/by-customer-pseudo/:pseudo', queries.byCustomerPseudo);
router.use((_, res) => res.status(404).send({ message: 'Route not found' }));
module.exports = router;
exports.logReq = (req) => {
console.log('METHOD:', req.method);
console.log('ENDPOINT:', req.originalUrl);
console.log('HEADERS:', req.headers);
console.log('PARAMS:', req.params);
console.log('BODY:', req.body);
}
{
"name": "api",
"version": "0.1.0",
"description": "Node.js api interacting with MongoDB",
"main": "server.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"repository": {
"type": "git",
"url": "https://githepia.hesge.ch/joel.cavat/mongodb-orders"
},
"keywords": [
"mongo",
"mongodb",
"node",
"nodejs",
"api"
],
"author": "Joël Cavat, Steven Liatti",
"license": "ISC",
"dependencies": {
"body-parser": "^1.19.0",
"express": "^4.17.0",
"mongodb": "^3.2.5"
},
"devDependencies": {
"nodemon": "^1.19.0"
}
}
// modules
const express = require('express');
const app = express();
const bodyParser = require('body-parser');
const router = require('./app/router');
// get all data/stuff of the body (POST) parameters
app.use(bodyParser.json()); // parse application/json
app.use(bodyParser.json({ type: 'application/vnd.api+json' })); // parse application/vnd.api+json as json
app.use(bodyParser.urlencoded({ extended: true })); // parse application/x-www-form-urlencoded
app.use(function (req, res, next) {
res.setHeader('Access-Control-Allow-Headers', 'Content-Type');
res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, PATCH, DELETE');
res.header('Access-Control-Allow-Origin', '*');
next();
});
// routes
app.use('/', router);
// start api
const port = process.env.PORT || 8080; // set our port
app.listen(port);
console.log('Api listening on port ' + port);
version: "2" version: "2"
services: services:
mongo-orders: mongo-orders:
image: mongo image: mongo
ports: ports:
- "27017:27017" - "27017:27017"
depends_on:
- mongo-seed
mongo-seed: mongo-seed:
build: . build: ./mongodb
links: api:
build: ./api
ports:
- "8080:8080"
depends_on:
- mongo-orders - mongo-orders
FROM mongo FROM mongo
COPY ./data/orders.json /orders.json COPY ./data/orders.json /orders.json
CMD mongoimport --host mongo-orders --db order --collection orders --type json --file orders.json --jsonArray && mongo --host mongo-orders order --eval 'db.orders.find( { "customer.id.floatApprox": { $exists: true } } ).forEach( tr => db.orders.update({_id: tr._id},{$set:{"customer.id": tr.customer.id.floatApprox}} ) )' && mongo --host mongo-orders order --eval 'db.orders.find().forEach( tr => db.orders.update({_id: tr._id}, {$set:{"shipping.when": new Date(tr.shipping.when)}}))' CMD mongoimport --host mongo-orders --db order --collection orders --type json --file orders.json --jsonArray && mongo --host mongo-orders order --eval 'db.orders.find( { "customer.id.floatApprox": { $exists: true } } ).forEach( tr => db.orders.update({_id: tr._id},{$set:{"customer.id": tr.customer.id.floatApprox}} ) )' && mongo --host mongo-orders order --eval 'db.orders.find().forEach( tr => db.orders.update({_id: tr._id}, {$set:{"shipping.when": new Date(tr.shipping.when)}}))'
\ No newline at end of file
File moved
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment