Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 65336fd

Browse files
17 - Validating Request Data with Zod
1 parent f0afe70 commit 65336fd

File tree

4 files changed

+46
-5
lines changed

4 files changed

+46
-5
lines changed

‎package-lock.json‎

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

‎package.json‎

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,8 @@
1515
"@neondatabase/serverless": "^0.7.2",
1616
"drizzle-orm": "^0.29.3",
1717
"express": "^4.18.2",
18-
"serverless-http": "^3.1.1"
18+
"serverless-http": "^3.1.1",
19+
"zod": "^3.22.4"
1920
},
2021
"devDependencies": {
2122
"dotenv": "^16.4.1",

‎src/db/validators.js‎

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
const {z} = require("zod")
2+
3+
async function validateLead(postData) {
4+
const lead = z.object({
5+
email: z.string().email()
6+
})
7+
let hasError;
8+
let validData = {}
9+
let message;
10+
try {
11+
validData = lead.parse(postData)
12+
hasError = false
13+
message = ''
14+
} catch (err) {
15+
console.log(err)
16+
hasError = true
17+
message = "Invalid email, please try again."
18+
}
19+
20+
return {
21+
data: validData,
22+
hasError: hasError,
23+
message:message
24+
}
25+
26+
}
27+
28+
module.exports.validateLead = validateLead

‎src/index.js‎

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
const serverless = require("serverless-http");
22
const express = require("express");
33
const crud = require('./db/crud')
4+
const validators = require('./db/validators')
45
const {getDbClient} = require('./db/clients')
56
const app = express();
67

@@ -34,11 +35,22 @@ app.get("/leads", async (req, res, next) => {
3435

3536
app.post("/leads", async (req, res, next) => {
3637
// POST -> create data
37-
const data = await req.body
38+
const postData = await req.body
3839
// validation???
40+
const {data, hasError, message} = await validators.validateLead(postData)
41+
if (hasError === true) {
42+
return res.status(400).json({
43+
message: message ? message : "Invalid request. please try again",
44+
});
45+
} else if (hasError === undefined) {
46+
return res.status(500).json({
47+
message: "Server Error",
48+
});
49+
}
50+
3951
const result = await crud.newLead(data)
4052
// insert data to the database
41-
return res.status(200).json({
53+
return res.status(201).json({
4254
results: result,
4355
});
4456
});

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /