-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathapp.js
More file actions
138 lines (109 loc) · 3.1 KB
/
Copy pathapp.js
File metadata and controls
138 lines (109 loc) · 3.1 KB
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
const path = require("path");
const dotenv = require("dotenv");
const cookieParser = require("cookie-parser");
const express = require("express");
const https = require("https");
const fileUpload = require("express-fileupload");
const rateLimiter = require("express-rate-limit");
const helmet = require("helmet");
const xss = require("xss-clean");
const cors = require("cors");
const mongoSanitize = require("express-mongo-sanitize");
// swagger
const swaggerUI = require('swagger-ui-express')
const YAML = require('yamljs')
const swaggerDocument = YAML.load('./swagger.yaml')
// USE V2
const cloudinary = require("cloudinary").v2;
// database
const connectDB = require("./db/connect");
// routers
const authRouter = require("./routers/authRoute");
const userRouter = require("./routers/userRoute");
const productsRouter = require("./routers/productRoute");
const ordersRouter = require("./routers/orderRoute");
require("express-async-errors");
const app = express();
// load config
dotenv.config({
path: "./config/config.env",
});
// load cloudinary
cloudinary.config({
path: "./config/config.env",
cloud_name: process.env.CLOUD_NAME,
api_key: process.env.CLOUD_API_KEY,
api_secret: process.env.CLOUD_API_SECRET,
});
const notFoundMiddleware = require("./middleware/not-found");
const errorMiddleware = require("./middleware/error-handler");
app.set("trust proxy", 1);
app.use(
rateLimiter({
windowMs: 15 * 60 * 1000,
max: 60,
})
);
app.use(helmet());
app.use(cors());
app.use(xss());
app.use(mongoSanitize());
// middleware
app.use(express.json());
app.use(cookieParser(process.env.JWT_SECRET));
app.use(fileUpload({ useTempFiles: true }));
// routes
app.get("/", (req, res) => {
res.send('<h1>Uniclique E-commerce API</h1><a href="/api-docs">Swagger Documentation</a>');
});
app.use('/api-docs', swaggerUI.serve, swaggerUI.setup(swaggerDocument))
app.get("/paystack", (req, res) => {
const params = JSON.stringify({
email: "customer@email.com",
amount: "200000",
});
const options = {
hostname: "api.paystack.co",
port: 443,
path: "/transaction/initialize",
method: "POST",
headers: {
Authorization: "Bearer SECRET_KEY",
"Content-Type": "application/json",
},
};
const reqpaystack = https
.request(options, (respaystack) => {
let data = "";
respaystack.on("data", (chunk) => {
data += chunk;
});
respaystack.on("end", () => {
res.send(data)
console.log(JSON.parse(data));
});
})
.on("error", (error) => {
console.error(error);
});
reqpaystack.write(params);
reqpaystack.end();
});
app.use("/api/v1/auth", authRouter);
app.use("/api/v1/products", productsRouter);
app.use("/api/v1/orders", ordersRouter);
app.use("/api/vi/users", userRouter);
// products route
app.use(notFoundMiddleware);
app.use(errorMiddleware);
const port = process.env.PORT || 3000;
const start = async () => {
try {
// connectDB
await connectDB(process.env.MONGO_URI);
app.listen(port, console.log(`Server is listening at port ${port}...`));
} catch (error) {
console.log(error);
}
};
start();