-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathserver.js
48 lines (42 loc) · 1.14 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
const { ApolloServer, gql } = require("apollo-server-express");
const bodyParser = require("body-parser");
const cors = require("cors");
const express = require("express");
const expressJwt = require("express-jwt");
const jwt = require("jsonwebtoken");
const db = require("./db");
const port = 9000;
const jwtSecret = Buffer.from("Zn8Q5tyZ/G1MHltc4F/gTkVJMlrbKiZt", "base64");
const typeDefs = gql`
type Query {
greeting: String
}
`;
const resolvers = {
Query: {
greeting: () => "Hello World"
}
};
const server = new ApolloServer({ typeDefs, resolvers });
const app = express();
app.use(
cors(),
bodyParser.json(),
expressJwt({
secret: jwtSecret,
credentialsRequired: false
})
);
const path = "/graphql";
server.applyMiddleware({ app, path });
app.post("/login", (req, res) => {
const { email, password } = req.body;
const user = db.users.list().find(user => user.email === email);
if (!(user && user.password === password)) {
res.sendStatus(401);
return;
}
const token = jwt.sign({ sub: user.id }, jwtSecret);
res.send({ token });
});
app.listen(port, () => console.info(`Server started on port ${port}`));