【Node.js】express-vaidatorを使って、送信データの検証をする
Node.js

【Node.js】express-vaidatorを使って、送信データの検証をする

作成日:2021年11月08日
更新日:2021年11月08日

前回は、Express で CORS エラーを解消しました。

nodejs-express-cors

【Node.js】Expressで作成した、REST APIsのCORSエラーを解消する

今回は、express-vaidator を使って、バックエンドで POST データの検証をします。

コードは、前回までのコードを使用します。

index.js

js
const express = require("express");
const bookRoutes = require("./routes/book");
const bodyParser = require("body-parser");
const app = express();
app.use(bodyParser.json());
app.use((req, res, next) => {
res.setHeader("Access-Control-Allow-Origin", "*");
res.setHeader(
"Access-Control-Allow-Methods",
"GET, POST, PUT, PATCH, DELETE, OPTION"
);
res.setHeader("Access-Control-Allow-Headers", "Content-Type, Authorization");
next();
});
app.use("/book", bookRoutes);
app.listen(8000, () => console.log("Server is running ..."));

routes/book.js

js
const express = require("express");
const bookController = require("../controllers/book");
const router = express.Router();
router.get("/get", bookController.getBook);
router.post("/post", bookController.postBook);
module.exports = router;

controllers/book.js

js
exports.getBook = (req, res, next) => {
res.status(200).json({
books: [
{
id: "aaaaaa",
title: "オズの魔法使い",
content: "前に進んでいったら、何とかなるという話。",
},
],
});
};
exports.postBook = (req, res, next) => {
const id = (Math.random() + 1).toString(36).slice(2, 8);
const title = req.body.title;
const content = req.body.content;
res.status(201).json({
message: "Data transmission completed!",
post: { id: id, title: title, content: content },
});
};

express-vaidator を使うと、送信されたデータ内容が正しいか間違っているか検証してくれる様になります。

まずは、express-vaidator をインストールします。

ターミナルでnpm install --save express-validator実行します。

次に、どの状況だと検証で引っ掛かるかを設定します。

routes フォルダの book.js を開きます。

express-vaidator からbodyを呼び出します。

js
const { body } = require("express-validator");

今回は、content が 4 文字未満の場合、エラーが発生する様にします。

文字列の長さを指定するときは、isLength を使用します。

また、余計な空白を削除するため、trim を使用します。

js
router.post(
"/post",
body("content").trim().isLength({ min: 4 }),
bookController.postBook
);

min: 4とすることで、4 文字未満の場合、エラーが発生する様になりました。

最後に、エラーが発生した場合、どう処理するかを設定します。

controllers フォルダの book.js を開きます。

express-validator からvalidationResultを呼び出します。

validationResultで検証結果を指定します。

js
exports.postBook = (req, res, next) => {
const errors = validationResult(req);
const id = (Math.random() + 1).toString(36).slice(2, 8);
const title = req.body.title;
const content = req.body.content;
res.status(201).json({
message: "Data transmission completed!",
post: { id: id, title: title, content: content },
});
};

errors が空欄ではない場合、つまりエラーが発生している場合、メッセージを表示する様にします。

js
exports.postBook = (req, res, next) => {
const errors = validationResult(req);
if (!errors.isEmpty()) {
return res
.status(400)
.json({ message: "validation errors", errors: errors.array() });
}
const id = (Math.random() + 1).toString(36).slice(2, 8);
const title = req.body.title;
const content = req.body.content;
res.status(201).json({
message: "Data transmission completed!",
post: { id: id, title: title, content: content },
});
};

一通り完成したので、Postman で確認します。

まずは、文字列が 4 文字以上の場合です。

image2

送信ができました。

次は、文字列が 4 文字未満の場合です。

image3

express-validator で設定した通り、エラーが表示されました。

© 2024あずきぱんウェブスタジオ