-
Notifications
You must be signed in to change notification settings - Fork 0
/
server.js
145 lines (121 loc) · 4.15 KB
/
server.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
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
require('dotenv').config()
// require necessary NPM packages
const express = require('express')
const bodyParser = require('body-parser')
const path = require('path')
const cors = require('cors')
const keystone = require('keystone')
const cookieParser = require('cookie-parser')
const handlebars = require('express-handlebars')
const multer = require('multer')
const merge = require('merge')
const storage = multer.memoryStorage()
// // require middleware
// const errorHandler = require('./lib/error_handler')
// const replaceToken = require('./lib/replace_token')
// const requestLogger = require('./lib/request_logger')
// require database configuration logic
// `db` will be the actual Mongo URI as a string
const db = require('./config/db')
console.log(db)
// define server and client ports
// used for cors and local port declaration
// const serverDevPort = 4741
const clientDevPort = 7165
// define secrete cookie
const cookieSecret = 'secretCookie'
// instantiate express application object
const app = express()
_ = require('underscore')
// set CORS headers on response from this API using the `cors` NPM package
// `CLIENT_ORIGIN` is an environment variable that will be set on Heroku
app.use(cors({ origin: process.env.CLIENT_ORIGIN || `http://localhost:${clientDevPort}` }))
console.log(`cors allowed from: http://localhost:${clientDevPort}`)
// Simple static file support
app.use(express.static(path.join(__dirname, 'public')))
// define port for API to run on
// const port = process.env.PORT || serverDevPort
// this middleware makes it so the client can use the Rails convention
// of `Authorization: Token token=<token>` OR the Express convention of
// `Authorization: Bearer <token>`
// app.use(replaceToken)
// cookie parser middleware for KeystoneJS
app.use(cookieParser(cookieSecret))
// multer middleware for KeystoneJS
app.use(multer({ storage: storage }).any())
// add `bodyParser` middleware which will parse JSON requests into
// JS objects before they reach the route files.
// The method `.use` sets up middleware for the Express application
app.use(bodyParser.json())
// this parses requests sent by `$.ajax`, which use a different content type
app.use(bodyParser.urlencoded({ extended: true }))
// log each request as it comes in for debugging
// app.use(requestLogger)
const coreHelpers = require('./templates/helpers/core')();
const extraHelpers = require('./templates/helpers/index')()
const hbsInstance = handlebars.create({
layoutsDir: './templates/layouts',
partialsDir: [
'./public',
__dirname + '/../templates/partials',
'./templates/partials',
],
defaultLayout: 'base',
helpers: merge(coreHelpers, extraHelpers),
extname: '.hbs',
})
// KeystoneJS config
keystone.init({
name: 'Recylcr 2.0',
brand: 'Recyclr',
session: false,
updates: 'updates',
auth: true,
debug: true,
'user model': 'User',
'auto update': true,
mongo: db,
'cookie secret': cookieSecret,
views: 'templates/views',
handlebars: hbsInstance,
'custom engine': hbsInstance.engine,
'view engine': 'hbs',
// Locals for handlebars templates
locals: {
_: require('underscore'),
env: process.env.ENV,
// Not sure if I'll need this
// utils: keystoneInst.utils,
// editable: keystoneInst.content.editable,
},
'cloudinary config': {
cloud_name: process.env.CLOUDINARY_NAME,
api_key: process.env.CLOUDINARY_KEY,
api_secret: process.env.CLOUDINARY_SECRET,
},
// serve public folder
static: 'public'
})
// Make sure to import models before any routes or middleware that creates
// documents using the keystone lists
keystone.import('models')
keystone.set('cors allow origin', true)
keystone.set('cors allow methods', true)
keystone.set('cors allow headers', true)
// Duplicate app settings
app.set('views', 'templates/views')
app.engine('hbs', hbsInstance.engine)
app.set('view engine', 'hbs')
// require route files
const routes = require('./routes');
// // register route files
// app.use(routes)
keystone.set('routes', routes)
// register error handling middleware
// note that this comes after the route middlewares, because it needs to be
// passed any error messages from them
// app.use(errorHandler)
// start keystone
keystone.start()
// needed for testing
module.exports = app