Quickstarters
如何构建 Nuxt.js 前端并将其连接到后端?
33 分
在本教程中,您将使用 nuxt js 构建一个待办事项列表应用程序,并将其连接到由 back4app 提供的托管后端服务。 如果您想掌握基本的 crud(创建、读取、更新、删除)操作,并使用 nuxt js 制作动态、响应式界面,那么本指南非常适合您。在本教程结束时,您的应用程序将与一个管理数据存储、身份验证等的后端无缝交互。 开发全栈应用程序可能会因为后端配置和数据库管理而变得具有挑战性。为了简化您的流程,我们使用 back4app— https //todoapp ku5ofg8s b4a run/ —让您可以专注于开发功能丰富的 nuxt js 前端。 back4app 提供完全托管的 nosql 数据库、用户身份验证、用于自定义逻辑的云代码以及便于集成的 sdk。这使您能够构建和部署可扩展的应用程序,而无需处理服务器基础设施。 关键要点 通过遵循本教程,您将: 使用 nuxt cli 初始化一个现代的 nuxt js 项目。 集成后端服务以处理您应用程序的数据。 实现动态的基本 crud 操作 https //todoapp ku5ofg8s b4a run/ 。 使用 back4app 上的容器化工作流部署您的完全功能应用程序。 前提条件 在开始之前,请确保您拥有 node js 和 npm 已安装在您的机器上。通过 node v 和 npm v 确认安装情况。 基本的 nuxt js 知识 , 包括组件、页面和异步数据获取。 一个 back4app 账户 用于管理您的后端服务。如果您还没有,请在 https //www back4app com/ 注册。 在满足这些前提条件后,您就可以开始构建您的项目了。 项目设置 首先设置您的本地开发环境并初始化一个新的 nuxt js 项目。 确保您已安装 node js (lts 版本) 。如果没有,请从 https //nodejs org/ 下载。 使用 nuxt cli 创建您的 nuxt js 项目 npx nuxi init todo app 进入你的项目目录 cd todo app 安装必要的依赖 npm install 启动开发服务器以验证设置 npm run dev 在浏览器中打开提供的 url,以查看您的 nuxt js 应用程序的运行情况。前端准备好后,继续在 back4app 上创建后端。 创建 todo 后端 back4app 提供一个完全托管的后端服务,基于 parse , 包括 nosql 数据库、身份验证、云代码和自动生成的 api。 按照以下步骤设置您的后端: 登录 到您的 https //www back4app com/ 并点击 "创建新应用。" 命名您的应用 (例如, todoapp ) 并选择 nodejs/parse 作为后端类型。 导航到 "数据库" > "浏览器" , 点击 "创建类" , 并选择 "自定义" 。命名类为 任务 并设置其权限以允许公共读写(您可以稍后细化这些设置)。 在 任务 类中,添加以下字段: 标题 (字符串)– 任务的标题。 描述 (字符串)– 关于任务的详细信息。 完成 (布尔值)– 任务完成状态。 截止日期 (日期)– 任务的截止日期。 点击 "保存" 来创建模式。 将 back4app 与 nuxt js 集成 您将使用 parse javascript sdk 将您的 nuxt js 应用程序连接到 back4app 后端。 安装 parse sdk npm install parse 通过创建一个专用模块来配置 sdk。例如,创建 plugins/parse client js ,内容如下 import parse from 'parse/dist/parse min js'; const parse app id = 'your application id'; const parse js key = 'your javascript key'; const parse server url = 'https //parseapi back4app com/'; parse initialize(parse app id, parse js key); parse serverurl = parse server url; export default parse; 然后,在您的 nuxt config ts 中注册此插件(或 nuxt config js ) export default { plugins \[ { src ' /plugins/parse client js', mode 'client' } ] } 您现在可以在页面或组件中导入 parse 以与后端交互。 开发前端 您的 nuxt js 应用程序将由页面和组件组成,以添加、显示、更新和删除任务。利用 nuxt 的基于文件的路由和异步数据获取来创建动态待办事项列表。 构建您的组件 在您的项目中创建一个 components 文件夹以组织您的 ui 组件 mkdir components 您将创建以下组件: taskform vue – 用于添加新任务。 tasklist vue – 用于显示任务列表。 taskitem vue – 用于表示单个任务。 taskform vue 该组件渲染一个表单,用于捕获任务详细信息并将其提交到 back4app。 \<template> \<form @submit prevent="handlesubmit"> \<input type="text" placeholder="task title" v model="title" required /> \<input type="text" placeholder="description" v model="description" required /> \<button type="submit">add task\</button> \</form> \</template> \<script> import parse from 'parse/dist/parse min js'; export default { name 'taskform', data() { return { title '', description '' }; }, methods { async handlesubmit() { try { const task = parse object extend('task'); const task = new task(); task set('title', this title); task set('description', this description); task set('completed', false); await task save(); this $emit('refresh'); this title = ''; this description = ''; } catch (error) { console error('error adding task ', error); } } } }; \</script> taskitem vue 该组件表示一个单独的任务,并提供按钮来切换其完成状态或删除任务。 \<template> \<div \ class="\['task item', { completed task completed }]"> \<div> \<h3>{{ task title }}\</h3> \<p>{{ task description }}\</p> \</div> \<div> \<button @click="togglecomplete"> {{ task completed ? 'undo' 'complete' }} \</button> \<button @click="deletetask">delete\</button> \</div> \</div> \</template> \<script> import parse from 'parse/dist/parse min js'; export default { name 'taskitem', props \['task'], methods { async togglecomplete() { try { const query = new parse query('task'); const tasktoupdate = await query get(this task id); tasktoupdate set('completed', !this task completed); await tasktoupdate save(); this $emit('refresh'); } catch (error) { console error('error updating task ', error); } }, async deletetask() { try { const query = new parse query('task'); const tasktodelete = await query get(this task id); await tasktodelete destroy(); this $emit('refresh'); } catch (error) { console error('error deleting task ', error); } } } }; \</script> tasklist vue 该组件通过遍历数组并使用 taskitem 组件渲染每个任务来显示任务列表。 \<template> \<div> \<p v if="tasks length === 0">no tasks available\</p> \<taskitem v for="task in tasks" \ key="task id" \ task="task" @refresh="refreshtasks" /> \</div> \</template> \<script> import taskitem from ' /taskitem vue'; export default { name 'tasklist', props \['tasks'], methods { refreshtasks() { this $emit('refresh'); } }, components { taskitem } }; \</script> 页面集成 在你的主页面(例如, pages/index vue ),管理任务的状态并集成你的组件。 \<template> \<div class="container"> \<h1>to do list\</h1> \<taskform @refresh="fetchtasks" /> \<tasklist \ tasks="tasks" @refresh="fetchtasks" /> \</div> \</template> \<script> import taskform from ' /components/taskform vue'; import tasklist from ' /components/tasklist vue'; import parse from 'parse/dist/parse min js'; export default { components { taskform, tasklist }, data() { return { tasks \[] }; }, methods { async fetchtasks() { try { const task = parse object extend("task"); const query = new parse query(task); const results = await query find(); this tasks = results map((task) => ({ id task id, task tojson() })); } catch (error) { console error("error fetching tasks ", error); } }, }, mounted() { this fetchtasks(); } }; \</script> 应用程序样式 创建一个全局样式表(例如, assets/css/main css ) 以添加基本样式 container { max width 600px; margin 40px auto; padding 0 20px; text align center; font family sans serif; } h1 { margin bottom 20px; } form { display flex; flex direction column; align items center; gap 10px; margin bottom 20px; } form input\[type="text"] { width 80%; max width 400px; padding 8px; box sizing border box; font size 1rem; } form button { padding 8px 16px; cursor pointer; font size 1rem; border none; background color #eaeaea; transition background color 0 2s ease; } form button\ hover { background color #ccc; } task item { display flex; flex direction column; align items center; justify content center; gap 12px; border 1px solid #ccc; border radius 6px; padding 15px; margin 10px 0; background color #fafafa; text align center; transition background color 0 2s ease; } task item completed h3, task item completed p { text decoration line through; color #888; } task item h3 { margin 0; font size 1 1rem; } task item p { margin 0; font size 1rem; } task item button { padding 6px 12px; border none; background color #eaeaea; cursor pointer; font size 0 9rem; } task item button\ hover { background color #ccc; } @media (min width 600px) { task item { flex direction row; } } 在你的 nuxt 配置中包含这个样式表,通过将其添加到 css 数组中,在 nuxt config ts export default { css \[' /assets/css/main css'] } 在 back4app 上部署前端 back4app web deployment 提供了一个容器化环境来托管您的 nuxt js 应用程序。 为生产配置 nuxt js 如有必要,请更新您的 nuxt config ts 以设置部署的基本路径: export default { router { base ' /' } } 生成生产构建 npm run build npm run generate 创建 dockerfile 在你的项目根目录下创建一个 dockerfile ,内容如下 # stage 1 build the nuxt js app from node 18 alpine as build workdir /app copy package json package lock json / run npm install copy run npm run build run npm run generate \# stage 2 serve the app using nginx from nginx\ alpine copy from=build /app/dist /usr/share/nginx/html expose 80 cmd \["nginx", " g", "daemon off;"] 在本地测试 docker 容器 构建你的 docker 镜像 docker build t todo frontend 运行容器 docker run p 8080 80 todo frontend 在你的浏览器中打开 http //localhost 8080 以验证你的 nuxt js 应用是否正确提供服务。 部署到 back4app 初始化一个 git 仓库,添加你的项目文件,并提交 git init git add git commit m "initial commit for back4app deployment" git branch m main git remote add origin \<your github repository url> git push u origin main 登录到 https //www back4app com/containers 点击 "创建新应用" , 提供你的项目名称,并选择你的 github 仓库。 授权 back4app 并选择 dockerfile 部署 确认构建设置并点击 "部署" 以启动部署 监控你的部署 部署后,使用 back4app 控制面板来 查看调试日志 监控容器性能和资源使用 在新提交时触发重建 如有需要,配置自定义域 访问你的实时应用程序在 https //todoapp ku5ofg8s b4a run/ https //todoapp ku5ofg8s b4a run/ 测试与调试 部署后,确认您的 nuxt js 前端与 back4app 后端正确通信: api 验证: 使用浏览器的开发者工具 (f12 → 网络) 检查 api 调用。 任务操作: 通过 ui 添加、完成和删除任务,并在 back4app 数据库浏览器中验证更新。 错误处理: 检查控制台日志中的错误,并测试边缘情况,例如空提交。 性能测试: 使用浏览器工具模拟慢网络条件以评估响应能力。 使用 back4app 与 nuxt js 的最佳实践 为了优化您的应用程序: 高效请求: 使用批量操作处理多个任务: const tasks = \[task1, task2, task3]; parse object saveall(tasks); 优化查询 仅检索必要字段 query select('title', 'completed'); 环境管理 将敏感密钥存储在环境变量中 nuxt public parse app id=your app id nuxt public parse js key=your js key 安全 使用acl限制访问 task setacl(new parse acl(parse user current())); 后端卸载 利用云代码处理复杂逻辑以减少api暴露。 结论 您现在已经通过创建nuxt js前端、将其与back4app的后端集成并使用容器化工作流进行部署,构建了一个完整的全栈待办事项应用程序。 本教程指导您完成每一步——从本地开发到云部署——确保您的nuxt js ui与后端服务之间的无缝交互。 展望未来,考虑增强功能,如实时更新、改进的身份验证和第三方集成。要进一步学习,请访问 https //www back4app com/docs 并探索社区资源。

