Jump into concepts and practice - no test required
or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Recall & Review
beginner
What is a server action in Next.js?
A server action is a special function that runs on the server to handle tasks like database updates or form submissions without exposing sensitive logic to the client.
Click to reveal answer
beginner
How do server actions help with database mutations in Next.js?
Server actions let you securely perform database changes directly on the server, avoiding client-side exposure and improving security and performance.
Click to reveal answer
intermediate
Which keyword is used to mark a function as a server action in Next.js?
The function is marked with the special directive `'use server'` at the top of the file or as a top-level string literal before the function.
Click to reveal answer
intermediate
Why should database mutations be done inside server actions rather than client components?
Doing mutations inside server actions keeps your database credentials safe, prevents unauthorized access, and reduces the risk of exposing sensitive logic to users.
Click to reveal answer
intermediate
What happens after a server action completes a database mutation in Next.js?
After completion, the server action can return data or trigger UI updates by revalidating data or refreshing components on the client side.
Click to reveal answer
What directive marks a function as a server action in Next.js?
A'use strict'
B'use client'
C'use server'
D'use database'
✗ Incorrect
The 'use server' directive tells Next.js that the function runs on the server.
Where do server actions run in Next.js?
AOn the server
BOn the client browser
CIn a web worker
DIn the database
✗ Incorrect
Server actions run on the server to securely handle tasks like database mutations.
Why should database mutations be done in server actions?
ATo improve client performance
BTo keep database credentials secure
CTo expose database credentials
DTo run code faster on the client
✗ Incorrect
Server actions keep sensitive data like database credentials safe by running on the server.
What can a server action return after a mutation?
AData or nothing
BClient-side scripts
CUI components
DOnly error messages
✗ Incorrect
Server actions can return data or nothing, which can be used to update the UI.
Which of these is NOT a benefit of server actions for database mutations?
AImproved security
BBetter performance
CCleaner code separation
DDirect client database access
✗ Incorrect
Server actions prevent direct client database access to protect security.
Explain how server actions in Next.js help secure database mutations.
Think about where the code runs and what it protects.
You got /4 concepts.
Describe the steps to create a server action that updates a database record in Next.js.
Focus on function setup, database call, and response.
You got /4 concepts.
Practice
(1/5)
1. What is the main purpose of using server actions for database mutations in Next.js?
easy
A. To run client-side animations after data changes
B. To securely update data on the server without exposing logic to the client
C. To fetch data from an external API on the client
D. To style components dynamically based on user input
Solution
Step 1: Understand server actions role
Server actions run on the server and handle data changes securely.
Step 2: Identify the security benefit
They keep mutation logic hidden from the client, preventing misuse.
Final Answer:
To securely update data on the server without exposing logic to the client -> Option B
Quick Check:
Server actions = secure server-side mutations [OK]
Hint: Server actions run on server to keep data safe [OK]
Common Mistakes:
Thinking server actions run on the client
Confusing server actions with client-side fetching
Believing server actions handle UI styling
2. Which of the following is the correct way to declare a server action function in Next.js?
easy
A. export async function addUser() { 'use server'; /* mutation code */ }
B. export async function addUser() { useServer(); /* mutation code */ }
C. export async function addUser() { /* mutation code */ } 'use server';
D. 'use server'; export async function addUser() { /* mutation code */ }
Solution
Step 1: Identify correct 'use server' placement
The 'use server' directive must be the first statement inside the function file or function scope.
Step 2: Check syntax correctness
'use server'; export async function addUser() { /* mutation code */ } places 'use server' at the top before the function, which is correct syntax.
Final Answer:
'use server'; export async function addUser() { /* mutation code */ } -> Option D
Quick Check:
'use server' directive must be at top [OK]
Hint: Put 'use server' at the top before function export [OK]
Common Mistakes:
Placing 'use server' inside function body after code
Using a function call like useServer() instead of directive
Putting 'use server' after function declaration
3. Given this server action code, what will be the result after calling await addUser({ name: 'Alice' }) if the database is empty?
'use server';
async function addUser(user) {
await db.users.create({ data: user });
return await db.users.count();
}
medium
A. Returns 1 because one user is added
B. Returns undefined because no return statement
C. Throws an error because 'use server' is misplaced
D. Returns 0 because count is called before creation
Solution
Step 1: Analyze database mutation
The function creates a user in the database with given data.
Step 2: Check return value
After creation, it returns the count of users, which should be 1.
Final Answer:
Returns 1 because one user is added -> Option A
Quick Check:
Created one user, count = 1 [OK]
Hint: Create then count means count reflects new data [OK]
Common Mistakes:
Assuming count runs before creation completes
Confusing 'use server' placement causing error
Missing return statement in function
4. Identify the error in this server action code snippet:
'use server';
export async function updateUser(id, data) {
await db.users.update({ where: { id }, data });
}
medium
A. Missing semicolon after 'use server' directive
B. Missing export keyword
C. Incorrect object structure in update call
D. No error, code is correct
Solution
Step 1: Check 'use server' directive syntax
The 'use server'; directive is correctly placed at the top of the module.
Step 2: Analyze update method parameters
The update method expects an object with 'where' and 'data' keys, but here 'data' is outside the object, causing syntax error.
Final Answer:
Incorrect object structure in update call -> Option C
Hint: Check object keys carefully in db update calls [OK]
Common Mistakes:
Assuming missing semicolon causes error
Forgetting to wrap data inside update object
Missing export keyword (actually present)
5. You want to create a server action that deletes a user only if they have no active orders. Which approach correctly combines server action and database mutation logic?