No big news from me again — just enjoying the summer with my family and prepping some fresh content for you. In this issue, you'll find a handy Nuxt tip on validating data in your server routes. Hope you enjoy it!
👉🏻 Learn how to make a simple to-do app with Nuxt.
👉🏻 Instead of manually defining server routes and fetching them on the client, the author uses Prim+RPC to define functions on Nuxt's server and simply call those functions directly from the client.
👉🏻 Focus on building your product and not worry about setting up auth, database, infrastructure, payments, and more.
💡 Nuxt Tip: Validate Data in Your Server Routes
When you are working with Nuxt server routes, you should always validate the data that you receive from the client before processing it.
This is important to ensure that your application is secure and that you are not vulnerable to attacks such as SQL injection or cross-site scripting. Additionally, validating your data can help you catch errors early on and prevent them from causing issues later on in your application.
Luckily, h3 provides a simple and powerful way to validate data in your Nuxt server routes.
h3 is the H(TTP) server framework which is used by Nitro, which is the server engine used in Nuxt 3+.
It provides the following utility methods to help you validate your data:
getValidatedQuery to validate query parameters
getValidatedRouterParams to validate route parameters
readValidatedBody to validate the request body
h3 allows you to use the validation library of your choice like Zod, Yup, or Joi to validate your data.
For this example, we will use Zod to validate the data in our Nuxt server routes with the following schema:
1import { z } from 'zod';23const productSchema = z.object({4 name: z.string().min(3).max(20),5 id: z.number({ coerce: true }).positive().int(),6});
Let's see how we can use these validation utils to validate query parameters in our Nuxt server routes. Therefore, you can use the getValidatedQuery method provided by h3 instead of getQuery. This method takes the schema that you want to validate the query parameters against and returns the validated query parameters:
If you're using Vue 3, you're probably using composables. But other than using VueUse where you can, how do you get the most out of them? Over the past few years I've been slowly putting together a list of patterns and best practices for how to write composables in the best way. I've spent hours reading the source code of VueUse (one of the best — but most time-consuming — ways to learn it). I've read articles, listened to talks, and written lots and lots of my own code. I ended up with 15 different patterns, and each one will help you to write better composables. I've condensed and put all of these composables together into a course — Composable Design Patterns. Get Composable Design Patterns now. Because this is the launch, it's on sale for 35% off until Thursday. For each of the 15 patterns in this course, you'll get: A concise overview that tells you when and how to use it, along with variations and edge cases ...
Weekly Vue News #194 Reactive Time Ago View online Hi 👋 I'm on vacation this week, so no special news from my side — just some fresh Vue & Nuxt content for you! Enjoy this issue and have a lovely week ☀️ Vue 📕 Optimizing heavy operations in Vue with Web Worke...
Read this on my blog We made it to 200! Thanks for reading and supporting me over the last few years, it means a lot to me. Tomorrow is the last day of the Composable Design Patterns course launch and the 35% off discount. If you were hoping to pick it up, don't forget to check it out! As always, I've got some tips and links for you, and a new podcast episode. Enjoy, and have a great week! — Michael 🔥 Default Content with Slots You can provide fallback content for a slot, in case no content is provided: < !-- Child.vue --> < template > < div > < slot > Hey! You forgot to put something in the slot! < / slot > < / div > < / template > This content can be anything, even a whole complex component that provides default behaviour: < !-- Child.vue --> < template > < div > < slot name = "search" > < !-- Can...
评论
发表评论