nuxt数据库之增删改查,父组件子组件传值

nuxt学到数据库这里,就涉及到响应数据,父组件向子组件传值,子组件向父组件传值,最终还是需要掌握vue3的组件知识了。学习真的是一个长期的过程,不管学习了什么知识,有多少,都应该及时的记录下来,这个记录的过程,就是不断巩固自身知识的过程。之前学习其他框架的时候,不用,过两天就忘记了,当许多插件解决问题,忘记这个插件名字后,那想不起来的时候就特别痛苦了。好记忆不如烂笔头,及时记录下来吧。

ui.nuxt.com中的form章节,有很多实例代码:Form - Nuxt UI

还有,github上有很多样例代码,比如这个Table的代码: https://github.com/nuxt/ui/blob/dev/docs/components/content/examples/TableExampleAdvanced.vue

这个Table例子看了好多遍,代码还是掌握不了啊,感觉有点难啊。Table - Nuxt UI

还是根据table上面的简单的例子,做一些修改吧,从简单的入手。

首先接着之前的文章,把drizzle orm的增删改查等做成对应的api接口路由。https://hub.nuxt.com/docs/recipes/drizzle#usage

读:select

server/api/users/index.get.ts

export default eventHandler(async () => {
  const todos = await useDrizzle().select().from(tables.users).all()

  return todos
})

增:insert

server/api/users/index.post.ts

export default eventHandler(async (event) => {
  const { name, email, password, avatar, createdAt } = await readBody(event);
  const todo = await useDrizzle()
    .insert(tables.users)
    .values({
      name,
      email,
      password,
      avatar,
      createdAt: new Date(),
    })
    .returning()
    .get();

  return todo;
});

 改:update

server/api/users/[id].patch.ts

export default eventHandler(async (event) => {
  const { id } = getRouterParams(event);
  const { completed } = await readBody(event);

  const todo = await useDrizzle()
    .update(tables.users)
    .set({
      completed,
    })
    .where(eq(tables.users.id, Number(id)))
    .returning()
    .get();

  return todo;
});

 删:delete

server/api/users/[id].delete.ts

export default eventHandler(async (event) => {
  const { id } = getRouterParams(event);

  const deletedTodo = await useDrizzle()
    .delete(tables.users)
    .where(and(eq(tables.users.id, Number(id))))
    .
<think> 我们正在讨论Nuxt.js中的useCookie,特别是如何实现增删改查操作。根据引用[2],我们知道useCookie的基本用法:可以获取和设置cookie。现在,我们将详细说明如何使用useCookie进行增、删、改、查。 1. **查(读取)**:使用`useCookie`创建引用即可读取cookie的。 2. **增/改(设置)**:直接给`useCookie`返回的ref对象赋即可。如果cookie不存在,赋操作会创建它;如果存在,则更新它。 3. **删(删除)**:将cookie的设置为`null`或`undefined`即可删除。 下面是一个示例,展示如何在一个Nuxt组件中实现这些操作: ```vue <template> <div> <h1>Cookie操作示例</h1> <p>用户信息:{{ userCookie }}</p> <button @click="createOrUpdateCookie">设置/更新Cookie</button> <button @click="deleteCookie">删除Cookie</button> </div> </template> <script setup> // 使用useCookie获取名为'user'的cookie const userCookie = useCookie('user'); // 创建或更新cookie const createOrUpdateCookie = () => { // 设置一个对象,也可以设置字符串、数字等 userCookie.value = { username: '张三', age: 30 }; // 也可以单独更新某个属性,但注意:由于cookie是整体存储,所以我们需要整体设置 // 例如,如果只想更新年龄,可以这样做: // userCookie.value = { ...userCookie.value, age: 31 }; }; // 删除cookie const deleteCookie = () => { userCookie.value = null; // 或者 userCookie.value = undefined }; </script> ``` ### 说明: - **增**:当我们给`userCookie.value`赋时,如果这个cookie原本不存在,那么它就会被创建。 - **删**:将`userCookie.value`设置为`null`或`undefined`,这个cookie就会被删除。 - **改**:重新给`userCookie.value`赋即可更新cookie。 - **查**:在模板中直接使用`userCookie`即可显示当前,在脚本中直接访问`userCookie.value`。 ### 注意事项: 1. **响应性**:`useCookie`返回的是一个响应式对象,当改变时,视图会自动更新。 2. **序列化**:`useCookie`会自动处理对象的序列化和反序列化(使用JSON),所以我们也可以存储对象。 3. **删除操作**:删除操作会将cookie从浏览器中移除,同时`userCookie.value`变为`null`。 ### 引用说明: 在Nuxt.js中,`useCookie`是一个内置的组合式函数,用于在服务端和客户端之间同步cookie状态。它确保了在服务端渲染(SSR)时也能正确读取和设置cookie。上述方法都是基于Nuxt3的`useCookie`函数[^2]。 §§相关问题§§ 1. 如何设置cookie的过期时间? 2. useCookie在服务端和客户端的行为有何不同? 3. 如何确保useCookie存储的数据是安全的? </think> 在 Nuxt.js 项目中,使用 `useCookie` 实现增删改查操作非常简洁高效。以下是完整实现方法: ### 📌 1. 创建/更新 Cookie(增/改) ```vue <script setup> const userCookie = useCookie('user', { maxAge: 60 * 60 * 24 * 7, // 7天有效期(秒) sameSite: 'lax', // 安全策略 secure: true // 仅HTTPS输 }) // 创建/更新整个Cookie对象 const setUserCookie = () => { userCookie.value = { id: 'U1001', name: '张三', role: 'admin' } } // 更新部分字段 const updateName = () => { userCookie.value = { ...userCookie.value, // 保留原有 name: '李四' // 更新指定字段 } } </script> ``` ### 🔍 2. 读取 Cookie(查) ```vue <template> <div v-if="userCookie"> <!-- 读取整个对象 --> <p>完整数据: {{ userCookie }}</p> <!-- 读取具体属性 --> <p>用户名: {{ userCookie.name }}</p> <p>用户ID: {{ userCookie.id }}</p> </div> </template> <script setup> // 直接访问cookie console.log('当前用户:', userCookie.value) </script> ``` ### 🗑️ 3. 删除 Cookie ```vue <script setup> const clearCookie = () => { // 方法1:赋为null userCookie.value = null // 方法2:删除特定字段 // userCookie.value = { ...userCookie.value, name: undefined } } </script> ``` ### 🛠️ 完整示例组件 ```vue <template> <div> <button @click="setUserCookie">设置Cookie</button> <button @click="updateName">更新用户名</button> <button @click="clearCookie">删除Cookie</button> <div v-if="userCookie"> <h3>用户信息</h3> <p>ID: {{ userCookie.id }}</p> <p>姓名: {{ userCookie.name }}</p> <p>角色: {{ userCookie.role }}</p> </div> <p v-else>Cookie未设置</p> </div> </template> <script setup> const userCookie = useCookie('user', { maxAge: 604800, // 7天 secure: process.env.NODE_ENV === 'production' }) const setUserCookie = () => { userCookie.value = { id: 'U1001', name: '张三', role: 'admin' } } const updateName = () => { if(userCookie.value) { userCookie.value = { ...userCookie.value, name: '李四' } } } const clearCookie = () => { userCookie.value = null } </script> ``` ### ⚠️ 关键注意事项 1. **响应式更新**:`useCookie` 返回响应式对象,数据变更自动同步到浏览器 2. **类型安全**:Cookie 会自动序列化为 JSON 存储 3. **SSR 支持**:在服务器端渲染时也能正确读取 4. **安全配置**: ```js useCookie('auth', { httpOnly: true, // 禁止JS访问(防XSS) secure: true, // 仅HTTPS输 sameSite: 'strict' // 防CSRF攻击 }) ``` 5. **过期控制**: - `maxAge`:设置存活时间(秒) - `expires`:设置具体过期日期对象 > 提示:修改 cookie 后页面会自动更新,无需手动刷新[^1][^2]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

andux

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值