Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions express/Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
up:
docker-compose up -d --build

down:
docker-compose down
13 changes: 13 additions & 0 deletions express/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
### Express Krakend

simple Microservice using Krakend API Gateway

### Command Docker And Build

```sh
make up
```

```sh
make down
```
4 changes: 4 additions & 0 deletions express/authors/.dockerignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
.env
krakend
node_modules
Dockerfile
2 changes: 2 additions & 0 deletions express/authors/.env
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
PORT = 3001
MONGO_URL = mongodb://db:27017/store
3 changes: 3 additions & 0 deletions express/authors/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
Dockerfile.krakend
krakend
node_modules
7 changes: 7 additions & 0 deletions express/authors/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
FROM node:14-alpine
WORKDIR /usr/src/books
COPY ./authors/package*.json ./
COPY ./authors ./
RUN npm install --silent
EXPOSE 3001
CMD npm run dev
51 changes: 51 additions & 0 deletions express/authors/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
require('dotenv/config')
const http = require('http')
const express = require('express')
const mongoose = require('mongoose')
const bodyParser = require('body-parser')
const cors = require('cors')
const compression = require('compression')
const morgan = require('morgan')

const route = require('./routes')

const app = express()
const server = http.createServer(app)

mongoose.Promise = global.Promise
mongoose
.connect(process.env.MONGO_URL, {
useNewUrlParser: true,
useUnifiedTopology: true,
useFindAndModify: false,
poolSize: 10
})
.then(() => {
if (process.env.NODE_ENV !== 'production') {
console.log('database is connected')
}
})
.catch(() => {
if (process.env.NODE_ENV !== 'production') {
console.log('database not connected')
}
})

app.use(bodyParser.json())
app.use(bodyParser.urlencoded({ extended: false }))
app.use(cors())
app.use(compression())
if (process.env !== 'production') {
app.use(morgan('dev'))
}

app.enable('trust proxy')
app.disable('x-powered-by')

app.use('/api/v1', route)

server.listen(process.env.PORT, '0.0.0.0', () => {
if (process.env.NODE_ENV !== 'production') {
console.log('server is running on port ' + server.address().port)
}
})
29 changes: 29 additions & 0 deletions express/authors/middlewares/middleware.auth.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
const jwt = require('jsonwebtoken')

module.exports = async (req, res, next) => {
const tokenHeader = req.headers.authorization

if (!tokenHeader) {
return res.status(401).json({
status: 'UNAUTHORIZED_ACCESS',
code: res.statusCode,
method: req.method,
message: 'unauthorized accessToken invalid or expired'
})
}

try {
const { email } = jwt.verify(tokenHeader.split('Bearer ')[1], '04b652623618fa9323c4a33970')
if (email == 'johndoe13@gmail.com') {
req.email = email
return next()
}
} catch (err) {
return res.status(403).json({
status: 'FORBIDDEN_ACCESS',
code: res.statusCode,
method: req.method,
message: 'cannot access this route'
})
}
}
30 changes: 30 additions & 0 deletions express/authors/models/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
const mongoose = require('mongoose')
const AuthorsSchema = new mongoose.Schema({
bookId: {
type: mongoose.Types.ObjectId,
required: [true, 'bookId is required'],
ref: 'books'
},
name: {
type: String,
required: [true, 'name is required']
},
state: {
type: String,
required: [true, 'state is required']
},
country: {
type: String,
required: [true, 'country is required']
},
createdAt: {
type: Date,
default: new Date()
},
updateAt: {
type: Date,
default: new Date()
}
})

module.exports = mongoose.model('authors', AuthorsSchema)
Loading