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

danybeltran/next-api-validation

Folders and files

NameName
Last commit message
Last commit date

Latest commit

History

10 Commits

Repository files navigation

Next API Validation

This is basically the same as serverless-request-validator ready be used in Next.js

How to use it:

It is nice to be able to programmatically define what you want your API endpoint(s) to do deppending on the request method used.

In express it's something like:

app.get((req,res)=>{
 res.send("Something");
})

That will work only when using a GET request

In Next.js (and Vercel) apps, your API are files in a specific order in the project directory, each file with a default export being the actual handler that will handle that request.

First, install the module:

npm install next-api-validation

Or

yarn add next-api-validation

Using it in any of your API routes in Next.js:

import validation from "next-api-validation";
export default validation.get((req,res)=>{
 res.send("This only accepts GET request")
})

As you can see, using the get method in the validation object prevents the handler from being executed if a different request method is used.

And so with other methods:

// api/index.js or api/index.ts
import validation from "next-api-validation";
export default validation.post((req,res)=>{
 res.send("You just sent a POST request")
})

This handler a POST request

What if an endpoint should handle requests using more than one or two methods?

Creating a default export of the function should solve that:

// api/index.js or api/index.ts
import validate from "next-api-validation"
export default validate({
 get(req,res){
 res.send("A get request")
 },
 post(req,res){
 res.send("I only handle post requests"))
 },
 put(req,res){
 res.send("Did you put something?")
 }
})

The previous code handles requests that use three different methods, and calls only the necessary handler. An example of how it can be used:

// CRUD of a MongoDB Document model
import { Post } from "src/Models";
import { connectToDatabase } from "src/utils";
import validate from "next-api-validation";
connectToDatabase();
export default validate({
 get: async (req, res) => {
 const posts = await Post.find();
 res.send(posts);
 },
 post: async (req, res) => {
 const newPost = new Post(req.body);
 const saved = await newPost.save();
 res.send(saved);
 },
 put: async (req, res) => {
 const editedPost = await Post.findByIdAndUpdate(req.body._id, req.body);
 res.send(editedPost);
 },
 delete: async (req, res) => {
 const deletedPost = await Post.findByIdAndDelete(req.body._id);
 res.send(deletedPost);
 },
});

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