Vue.js 튜토리얼오늘 칼럼에서는 Vue.js 학습의 세 번째 부분인 서버와의 데이터 상호작용을 소개합니다.
분명히 이전 02_toDoList
에는 치명적인 결함이 있었습니다. 즉, 해당 데이터는 브라우저 측에만 존재합니다. 사용자가 페이지를 닫거나 다시 로드하면 이전에 프로그램에 추가한 모든 데이터가 손실되고 모든 것이 프로그램의 초기 상태로 돌아갑니다. 이 문제를 해결하기 위해서는 웹 애플리케이션의 프런트엔드가 백엔드 서버에서 얻은 입력 데이터를 적절한 시점에 저장하고, 필요할 때 서버에서 데이터를 검색해야 합니다. 노트의 이 부분은 Vue.js 프레임워크를 사용하여 웹 애플리케이션의 프런트엔드와 백엔드 간의 상호 작용을 완료하는 방법을 기록합니다. 이번에는 전체 학습 과정을 실행하는 "방명록" 애플리케이션도 구축하겠습니다. 02_toDoList
存在着一个很致命的缺陷。那就是它的数据只存在于浏览器端,一但用户关闭或重新载入页面,他之前加入到程序中的数据就会全部丢失,一切又恢复到程序的初始状态。要想解决这个问题,就需要 Web 应用的前端在适当的时间将获得的输入数据存储到后端服务器上,然后在需要时再从服务器上获取这些数据。这部分笔记将记录如何利用 Vue.js 框架来完成 Web 应用程序的前端与后端之间的交互。这一次,我同样会通过构建一个"留言本"应用来贯穿整个学习过程。
首先需要在code
目录下依次执行npm install express body-parser knex
和npm install sqlite3@
命令,安装接下来创建 Web 服务所需要的后端组件(需要注意的是,这里安装的sqlite3
要根据knex
安装后的提示选择对应的版本)。接下来,在code
目录下创建一个名为03_Message
的目录,并在该目录下执行npm init -y
命令,将其初始化成一个 Node.js 项目。在这里,之所以将服务端所需要的组件安装在项目目录的上一级目录中,是因为我接下来还需要在项目目录中安装前端组件,并将其开放给浏览器端访问,所以前后端所需要的组件最好分开存放。
现在,我要基于 Express 框架来创建一个 Web 服务了。具体做法就是在code/03_Message
目录下创建一个名为index.js
的服务器端脚本文件,并在其中输入如下代码:
const path = require('path'); const express = require('express') const bodyParser = require('body-parser'); const knex = require('knex'); const port = 8080; // 创建服务器实例 const app = express(); // 配置 public 目录,将其开放给浏览器端 app.use('/', express.static(path.join(__dirname, 'public'))); // 配置 node_modules 目录,将其开放给浏览器端 app.use('/node_modules', express.static(path.join(__dirname, 'node_modules'))); //配置 body-parser 中间件,以便获取 POST 请求数据。 app.use(bodyParser.urlencoded({ extended : false})); app.use(bodyParser.json()); // 创建数据库连接对象: const appDB = knex({ client: 'sqlite3', // 设置要连接的数据类型 connection: { // 设置数据库的链接参数 filename: path.join(__dirname, 'data/database.sqlite') }, debug: true, // 设置是否开启 debug 模式,true 表示开启 pool: { // 设置数据库连接池的大小,默认为{min: 2, max: 10} min: 2, max: 7 }, useNullAsDefault: true }); appDB.schema.hasTable('notes') // 查看数据库中是否已经存在 notes 表 .then(function(exists) { if(exists == false) { // 如果 notes 表不存在就创建它 appDB.schema.createTable('notes', function(table) { // 创建 notes 表: table.increments('uid').primary();// 将 uid 设置为自动增长的字段,并将其设为主键。 table.string('userName'); // 将 userName 设置为字符串类型的字段。 table.string('noteMessage'); // 将 notes 设置为字符串类型的字段。 }); } }) .then(function() { // 请求路由 // 设置网站首页 app.get('/', function(req, res) { res.redirect('/index.htm'); }); // 响应前端获取数据的 GET 请求 app.get('/data/get', function(req, res) { appDB('notes').select('*') .then(function(data) { console.log(data); res.status(200).send(data); }).catch(function() { res.status(404).send('找不到相关数据'); }); }); // 响应前端删除数据的 POST 请求 app.post('/data/delete', function(req, res) { appDB('notes').delete() .where('uid', '=', req.body['uid']) .catch(function() { res.status(404).send('删除数据失败'); }); res.send(200); }); // 响应前端添加数据的 POST 请求 app.post('/data/add', function(req, res) { console.log('post data'); appDB('notes').insert( { userName : req.body['userName'], noteMessage : req.body['noteMessage'] } ).catch(function() { res.status(404).send('添加数据失败'); }); res.send(200); }); // 监听 8080 端口 app.listen(port, function(){ console.log(`访问 http://localhost:${port}/,按 Ctrl+C 终止服务!`); }); }) .catch(function() { // 断开数据库连接,并销毁 appDB 对象 appDB.destroy(); });
由于 Vue.js 框架的特点,前端需要后端提供的服务除了获取指定的 HTML 和 JavaScript 文件之外,主要就是对数据库的增删改查操作了,所以在上面这个服务中,除了将public
、node_modules
目录整体开放给浏览器端访问之外,主要提供了一个基于 GET 请求的数据查询服务,和两个基于 POST 请求的数据添加与删除操作。
接下来,我可以开始前端部分的构建了。首先需要在code/03_Message
目录下执行npm install vue axios
命令,安装接下来所要用到的前端组件(该命令会自动生成一个node_modules
目录,正如上面所说,该目录会被服务端脚本整体开放给浏览器端)。然后,继续在同一目录下创建public
目录,并在其中创建一个名为index.htm
的文件,其代码如下:
nbsp;html> <meta> <meta> <meta> <script></script> <script></script> <script></script> <title>留言本</title> <p> </p><h1 id="留言本">留言本</h1> <p> <span>{{ note.userName }} 说:{{ note.noteMessage }} </span> <input> </p> <p> </p><h2 id="请留言">请留言:</h2> <label>用户名:</label> <input> <br> <label>写留言:</label> <input> <input>
这个页面主要被分为了两个部分,第一部分会根据notes
中的数据使用v-for
指令迭代显示已被添加到数据库中的留言,并提供了一个删除
按钮以便删除指定的留言(使用v-on
指令绑定单击事件处理函数)。第二部分则是一个用于添加留言
的输入界面,这里使用了v-model
指令来获取需要用户输入的userName
和Message
数据。现在,我需要来创建相应的 Vue 对象实例了,为此,我会在刚才创建的public
目录下再创建一个js
目录,并在其中创建名为main.js
的自定义前端脚本文件,其代码如下:
// 程序名称: Message // 实现目标: // 1. 学习 axios 库的使用 // 2. 掌握如何与服务器进行数据交互 const app = new Vue({ el: '#app', data:{ userName: '', Message: '', notes: [] }, created: function() { that = this; axios.get('/data/get') .then(function(res) { that.notes = res.data; }) .catch(function(err) { console.error(err); }); }, methods:{ addNew: function() { if(this.userName !== '' && this.Message !== '') { that = this; axios.post('/data/add', { userName: that.userName, noteMessage: that.Message }).catch(function(err) { console.error(err); }); this.Message = ''; this.userName = ''; axios.get('/data/get') .then(function(res) { that.notes = res.data; }) .catch(function(err) { console.error(err); }); } }, remove: function(id) { if(uid > 0) { that = this; axios.post('/data/delete', { uid : id }).catch(function(err) { console.error(err); }); axios.get('/data/get') .then(function(res) { that.notes = res.data; }) .catch(function(err) { console.error(err); }); } } } });
这个 Vue 实例与我们之前创建的大同小异,主要由以下四个成员组成:
el
成员:用于以 CSS 选择器的方式指定 Vue 实例所对应的元素容器,在这里,我指定的是<p id="app"></p>
元素。-
data
成员:用于设置页面中绑定的数据,这里设置了以下三个数据变量:-
notes
:这是一个数组变量,用于存放已被添加的留言记录。 -
userName
:这是一个字符串变量,用于获取"用户名"数据。 -
Message
:这是一个字符串变量,用于获取"留言"数据。
-
created
成员:用于在程序载入时做初始化操作,在这里,我从服务端读取了已被添加的留言记录,并将其加载到notes
变量中。-
먼저methods
code
디렉터리에서npm install express body-parser knex
및npm install sqlite3@
을 실행해야 합니다. . 웹 서비스를 생성하는 데 필요한 백엔드 구성 요소를 설치하는 명령(여기에 설치된sqlite3
은knex
뒤의 프롬프트에 따라 해당 버전을 선택해야 함) > 설치) . 다음으로code
디렉터리에03_Message
라는 디렉터리를 생성하고 이 디렉터리에서npm init -y
명령을 실행하여 복사합니다. Node.js 프로젝트. 여기서 서버에 필요한 컴포넌트를 프로젝트 디렉토리의 상위 디렉토리에 설치하는 이유는 프론트엔드 컴포넌트도 프로젝트 디렉토리에 설치하고 브라우저에서 열어서 접근해야 하기 때문입니다. 터미널에 필요한 구성 요소는 별도로 보관하는 것이 가장 좋습니다. 🎜🎜이제 Express 프레임워크를 기반으로 웹 서비스를 만들어 보겠습니다. 구체적인 방법은code/03_Message
디렉토리에index.js
라는 서버 측 스크립트 파일을 생성하고 그 안에 다음 코드를 입력하는 것입니다: 🎜<!-- 开发环境版本,包含了有帮助的命令行警告 --> <script></script> <!-- 或者 --> <!-- 生产环境版本,优化了文件大小和载入速度 --> <script></script>
🎜Due to Vue.js 프레임워크의 특성상 프런트엔드는 지정된 HTML 및 JavaScript 파일을 얻는 것 외에도 주로 데이터베이스를 추가, 삭제, 수정 및 쿼리하기 위해 백엔드에서 제공하는 서비스가 필요합니다.public
외에도 전체node_modules
디렉터리가 브라우저 액세스에 공개되는 것 외에도 주로 GET 요청을 기반으로 한 데이터 쿼리 서비스와 두 가지 데이터 추가 및 POST 요청을 기반으로 한 삭제 작업. 🎜🎜다음으로 프런트 엔드 부분 구축을 시작할 수 있습니다. 먼저code/03_Message
디렉터리에서npm install vue axios
명령을 실행하여 다음에 사용할 프런트 엔드 구성 요소를 설치해야 합니다(이 명령은 자동으로node_modules 디렉터리는 위에서 언급한 것처럼 서버 측 스크립트에 의해 브라우저에 전체적으로 열립니다. 그런 다음 계속해서 동일한 디렉터리에 <code>public
디렉터리를 만들고 그 안에 다음 코드를 사용하여index.htm
이라는 파일을 만듭니다. 🎜rrreee🎜이 페이지는 주로 두 부분으로 나누어 첫 번째 부분은v-for
명령을 사용하여notes
의 데이터를 기반으로 데이터베이스에 추가된 설명을 반복적으로 표시하고, 지정된 메시지를 삭제하려면삭제
버튼을 제공하세요(클릭 이벤트 핸들러 기능을 바인딩하려면v-on
지시문을 사용하세요). 두 번째 부분은메시지 추가
를 위한 입력 인터페이스입니다. 여기서v-model
명령은userName
및메시지를 얻는 데 사용됩니다.
데이터. 이제 해당 Vue 객체 인스턴스를 생성해야 합니다. 이를 위해 방금 생성한public
디렉터리 아래에 또 다른js
디렉터리를 만들고 여기에 이름을 만듭니다. .main.js
에 대한 사용자 정의 프런트 엔드 스크립트 파일입니다. 해당 코드는 다음과 같습니다. 🎜rrreee🎜이 Vue 인스턴스는 이전에 만든 인스턴스와 유사하며 주로 다음 4개의 멤버로 구성됩니다. : 🎜- 🎜
el
멤버: CSS 선택기를 사용하여 Vue 인스턴스에 해당하는 요소 컨테이너를 지정하는 데 사용됩니다. 여기서는<p id="app"> code> 요소입니다. 🎜</p>
- 🎜
data
멤버: 페이지에 바인딩된 데이터를 설정하는 데 사용됩니다. 여기에는 다음 세 가지 데이터 변수가 설정됩니다. 🎜notes: 추가된 메시지 레코드를 저장하는 데 사용되는 배열 변수입니다.
-
userName
: "사용자 이름" 데이터를 얻는 데 사용되는 문자열 변수입니다. -
메시지
: "메시지" 데이터를 얻는 데 사용되는 문자열 변수입니다.
- 🎜
created
멤버: 프로그램 로드 시 초기화에 사용됩니다. 여기서는 추가된 메시지 기록을 서버에서 읽어서 로드합니다.notes
변수에 넣으세요. 🎜 - 🎜
methods
멤버: 페이지에 바인딩된 이벤트 처리 함수를 정의하는 데 사용됩니다. 여기에는 다음 두 가지 이벤트 처리 함수가 정의됩니다.-
addNew
:用于添加新的留言记录,并同步更新notes
中的数据。 -
remove
:用于删除指定的留言记录,并同步更新notes
中的数据。
-
通常情况下,我们在 Vue.js 框架中会选择使用 axios 这样的第三方组件来处理发送请求和接收响应数据的工作,引入该组件的方式与引入 Vue.js 框架的方式是一样的,可以像上面一样先下载到本地,然后使用
<script></script>
标签引入,也可以使用 CDN 的方式直接使用<script></script>
标签引入,像这样:<!-- 开发环境版本,包含了有帮助的命令行警告 --> <script></script> <!-- 或者 --> <!-- 生产环境版本,优化了文件大小和载入速度 --> <script></script>
需要注意的是,该引用标签在 HTML 页面中的位置必须要在自定义 JavaScript 脚本文件(即
main.js
)的引用标签之前。当然,我在上述代码中只展示了axios.get
和axios.post
这两个最常用方法的基本用法,由于该组件支持返回 Promise 对象,所以我们可以采用then
方法调用链来处理响应数据和异常状况。关于 axios 组件更多的使用方法,可以参考相关文档(http://www.axios-js.com/zh-cn/docs/)。更多相关免费学习:javascript(视频)
- 🎜
위 내용은 Vue.js 학습 3: 서버와의 데이터 상호작용의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

NetflixusesAcustomFrameworkCalled "Gibbon"BuiltonReact, NotreactorVuedirectly.1) TeamExperience : 2) ProjectComplexity : vueforsimplerProjects, 3) CustomizationNeeds : reactoffersmoreflex.4)

Netflix는 주로 프레임 워크 선택의 성능, 확장 성, 개발 효율성, 생태계, 기술 부채 및 유지 보수 비용을 고려합니다. 1. 성능 및 확장 성 : Java 및 SpringBoot는 대규모 데이터 및 높은 동시 요청을 효율적으로 처리하기 위해 선택됩니다. 2. 개발 효율성 및 생태계 : React를 사용하여 프론트 엔드 개발 효율성을 향상시키고 풍부한 생태계를 활용하십시오. 3. 기술 부채 및 유지 보수 비용 : Node.js를 선택하여 유지 보수 비용과 기술 부채를 줄이기 위해 마이크로 서비스를 구축하십시오.

Netflix는 주로 VUE가 특정 기능을 위해 보충하는 프론트 엔드 프레임 워크로 React를 사용합니다. 1) React의 구성 요소화 및 가상 DOM은 Netflix 애플리케이션의 성능 및 개발 효율을 향상시킵니다. 2) VUE는 Netflix의 내부 도구 및 소규모 프로젝트에 사용되며 유연성과 사용 편의성이 핵심입니다.

vue.js는 복잡한 사용자 인터페이스를 구축하는 데 적합한 점진적인 JavaScript 프레임 워크입니다. 1) 핵심 개념에는 반응 형 데이터, 구성 요소화 및 가상 DOM이 포함됩니다. 2) 실제 응용 분야에서는 TODO 응용 프로그램을 구축하고 Vuerouter를 통합하여 시연 할 수 있습니다. 3) 디버깅 할 때 VuedeVtools 및 Console.log를 사용하는 것이 좋습니다. 4) 성능 최적화는 V-IF/V- 쇼, 목록 렌더링 최적화, 구성 요소의 비동기로드 등을 통해 달성 할 수 있습니다.

vue.js는 중소형 프로젝트에 적합하지만 REACT는 크고 복잡한 응용 프로그램에 더 적합합니다. 1. Vue.js의 응답 형 시스템은 종속성 추적을 통해 DOM을 자동으로 업데이트하여 데이터 변경을 쉽게 관리 할 수 있습니다. 2. 반응은 단방향 데이터 흐름을 채택하고 데이터 흐름에서 하위 구성 요소로 데이터가 흐르고 명확한 데이터 흐름과 곤란하기 쉬운 구조를 제공합니다.

vue.js는 중소형 프로젝트 및 빠른 반복에 적합한 반면 React는 크고 복잡한 응용 프로그램에 적합합니다. 1) vue.js는 사용하기 쉽고 팀이 불충분하거나 프로젝트 규모가 작는 상황에 적합합니다. 2) React는 더 풍부한 생태계를 가지고 있으며 고성능 및 복잡한 기능적 요구가있는 프로젝트에 적합합니다.

VUE에서 태그의 점프를 구현하는 방법에는 다음이 포함됩니다. HTML 템플릿의 A 태그를 사용하여 HREF 속성을 지정합니다. VUE 라우팅의 라우터 링크 구성 요소를 사용하십시오. javaScript 에서이. $ router.push () 메소드를 사용하십시오. 매개 변수는 쿼리 매개 변수를 통해 전달 될 수 있으며 동적 점프를 위해 라우터 옵션에서 경로가 구성됩니다.

VUE에서 구성 요소 점프를 구현하는 방법은 다음과 같습니다. 라우터 링크 및 & lt; router-view & gt; 하이퍼 링크 점프를 수행하고 대상 경로로 속성을 지정합니다. & lt; router-view & gt; 현재 라우팅 된 렌더링 된 구성 요소를 표시하는 구성 요소. 프로그래밍 방식 탐색을 위해 router.push () 및 router.replace () 메소드를 사용하십시오. 전자는 역사를 구하고 후자는 기록을 떠나지 않고 현재 경로를 대체합니다.


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

DVWA
DVWA(Damn Vulnerable Web App)는 매우 취약한 PHP/MySQL 웹 애플리케이션입니다. 주요 목표는 보안 전문가가 법적 환경에서 자신의 기술과 도구를 테스트하고, 웹 개발자가 웹 응용 프로그램 보안 프로세스를 더 잘 이해할 수 있도록 돕고, 교사/학생이 교실 환경 웹 응용 프로그램에서 가르치고 배울 수 있도록 돕는 것입니다. 보안. DVWA의 목표는 다양한 난이도의 간단하고 간단한 인터페이스를 통해 가장 일반적인 웹 취약점 중 일부를 연습하는 것입니다. 이 소프트웨어는

에디트플러스 중국어 크랙 버전
작은 크기, 구문 강조, 코드 프롬프트 기능을 지원하지 않음

드림위버 CS6
시각적 웹 개발 도구

맨티스BT
Mantis는 제품 결함 추적을 돕기 위해 설계된 배포하기 쉬운 웹 기반 결함 추적 도구입니다. PHP, MySQL 및 웹 서버가 필요합니다. 데모 및 호스팅 서비스를 확인해 보세요.

안전한 시험 브라우저
안전한 시험 브라우저는 온라인 시험을 안전하게 치르기 위한 보안 브라우저 환경입니다. 이 소프트웨어는 모든 컴퓨터를 안전한 워크스테이션으로 바꿔줍니다. 이는 모든 유틸리티에 대한 액세스를 제어하고 학생들이 승인되지 않은 리소스를 사용하는 것을 방지합니다.
