-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathapp.js
112 lines (100 loc) · 2.49 KB
/
app.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
const express = require('express')
const bodyParser = require('body-parser')
const mongoose = require('mongoose')
const multer = require('multer')
const graphqlHttp = require('express-graphql')
const path = require('path')
const gqSchema = require('./graphql/schema')
const gqResolver = require('./graphql/resolvers')
const auth = require('./middleware/auth')
const deleteFile = require('./util/deleteFile')
// multer Config
const storage = multer.diskStorage({
destination: (req, file, cb) => {
cb(null, 'images')
},
filename: (req, file, cb) => {
cb(null, Date.now().toString() + '_' + file.originalname)
}
})
const fileFilter = (req, file, cb) => {
if (file.mimetype === 'image/jpeg') {
cb(null, true)
} else {
cb(null, false)
}
}
// Express Starts
const app = express()
// Middlewares
app.use(bodyParser.json())
app.use(multer({ storage, fileFilter }).single('image'))
// Static files
app.use('/images', express.static('images'))
// CORS Settings
app.use((req, res, next) => {
res.setHeader('Access-Control-Allow-Origin', '*')
res.setHeader('Access-Control-Allow-Methods', 'OPTIONS,GET,POST,PUT,DELETE')
res.setHeader('Access-Control-Allow-Headers', 'Content-Type, Authorization')
if (req.method === 'OPTIONS') {
return res.sendStatus(200)
}
next()
})
// Authorization
app.use(auth)
// File Upload
app.put('/post-image', (req, res, next) => {
if (!req.isAuth) {
throw new Error('Not Authenticated')
}
if (!req.file) {
return res.status(200).json({ message: 'No File Provided!' })
}
if (req.body.oldImage) {
const imagePath = path.join(__dirname, req.body.oldImage)
deleteFile(imagePath)
}
return res
.status(201)
.json({ message: 'Uploaded Successfully.', filePath: req.file.path })
})
app.use(
'/graphql',
graphqlHttp({
schema: gqSchema,
rootValue: gqResolver,
graphiql: true,
formatError(err) {
if (!err.originalError) {
return err
}
const data = err.originalError.data
const message = err.message || 'An Error Occured'
const status = err.originalError.code || 500
return { message, status, data }
}
})
)
// Error
app.use((err, req, res, next) => {
console.log(err)
const status = err.httpStatusCode || 500
const message = err.message
res.status(status).json({ message })
})
// Database Config
mongoose
.connect(
'mongodb+srv://ch48h2o:[email protected]/Message?retryWrites=true',
{
useNewUrlParser: true
}
)
.then(() => {
console.log('Connected!')
app.listen(3030)
})
.catch(err => {
console.log(err)
})