npm init
npm install express --save
npm install mongoose --save
structure
mkdir website
cd website
npm init
npm install --save mongoose
npm install --save express
database.js
const mongoose = require('mongoose');
const DATABASE_CONECTION = 'mongodb://mongo/test';
var kittySchema = mongoose.Schema({
name: String
});
Kitten = exports.Kitten = mongoose.model('Kitten', kittySchema);
exports.initializeMongo = function() {
mongoose.connect(DATABASE_CONECTION);
console.log('Trying to connect to ' + DATABASE_CONECTION);
var db = mongoose.connection;
db.on('error', console.error.bind(console, 'connection error: We might not be as connected as I thought'));
db.once('open', function() {
console.log('We are connected you and I!');
addRandomCat();
});
}
var addRandomCat = function() {
var silence = new Kitten({
name: 'Silence' + Math.random()
});
silence.save(function (err, fluffy) {
if (err) return console.error(err);
console.log('There is a new random cat in the neighborhood');
});
}
index.js
console.log("Oh Yeah!")
const express = require('express')
const database = require('./database')
const app = express()
database.initializeMongo();
app.get('/', function (req, res) {
res.send('Hello World!')
})
app.get('/testFind', function (req, res) {
database.Kitten.find(function (err, kittens) {
if (err) res.status(500).send({ error: err });
console.log(kittens);
res.json(kittens);
})
})
app.listen(3000, function () {
console.log('Example app listening on port 3000!')
})
Dockerfile
FROM node:9.3.0-alpine
# Create app directory
WORKDIR /usr/src/app
# Install app dependencies
COPY package.json .
RUN npm install
# Bundle app source
COPY . .
EXPOSE 3000
CMD ["node", "index.js"]
docker-compose.yml
version: '3'
services:
web:
image: docker-node-express-mongoapp
build: ./website
command: node index.js
ports:
- "3000:3000"
volumes:
- ./web-site:/usr/src/app
- /usr/src/app/node_modules
depends_on:
- "mongo"
mongo:
image: "mongo"
ports:
- "27017:27017"
adminmongo:
image: "mrvautin/adminmongo"
ports:
- "1234:1234"
docker compose up
docker-compose up