Javascript高级-server.js 与 AJAX

107 阅读12分钟

✊不积跬步,无以至千里;不积小流,无以成江海。

Nodejs开发第一个server

要使用 Node.js 开发一个服务器,可以按照以下步骤进行:

  1. 初始化项目:首先,在你的项目目录中打开终端,并运行以下命令来初始化一个新的 Node.js 项目:
npm init
  1. 安装依赖:接下来,你需要安装一些必要的依赖项。对于一个简单的服务器,我们将使用 express 框架。在终端中运行以下命令来安装 express
npm install express
  1. 创建服务器文件:在项目目录下创建一个新的 JavaScript 文件,例如 server.js。使用任何文本编辑器打开该文件,并添加以下代码:
const express = require('express');

const app = express();
const port = 3000;

// 创建服务器
app.get('/', (req, res) => {
  res.send('Hello, World!');
});

//监听服务器端口
app.listen(port, () => {
  console.log(`Server running at http://localhost:${port}/`);
});

在这个示例中,我们首先引入了 express 模块,并创建了一个 app 实例。然后,我们定义了一个路由处理程序,用于处理根路径的 GET 请求。当有请求到达根路径时,服务器将发送一个简单的 "Hello, World!" 响应。

最后,我们使用 app.listen 方法指定服务器监听的端口号,并在服务器启动后打印一条消息到控制台。

  1. 运行服务器:在终端中,进入到项目目录,并运行以下命令来启动服务器:
node server.js

服务器将在指定的端口上启动,并且可以通过浏览器或其他 HTTP 客户端访问。

这就是使用 Node.js 和 express 创建一个简单服务器的基本步骤。当然,这只是一个起点,你可以进一步扩展服务器的功能,处理更复杂的路由、请求参数、静态文件等。 express 框架提供了丰富的功能和中间件。

用server.js创建网站

要使用 server.js 创建一个网站,你可以按照以下步骤进行:

  1. 安装依赖:首先,确保你已经安装了 Node.js,并在项目目录中打开终端。然后,运行以下命令来安装所需的依赖项:
npm install express

这将安装 express 框架,用于创建和管理网站的路由和中间件。

  1. 创建服务器文件:在项目目录下创建一个新的 JavaScript 文件,例如 server.js。使用任何文本编辑器打开该文件,并添加以下代码:
const express = require('express');
const app = express();
const port = 3000;

// 设置静态文件目录,例如 CSS、图片等
app.use(express.static('public'));

// 定义路由
app.get('/', (req, res) => {
  res.send('Hello, World! This is my website.');
});

app.get('/about', (req, res) => {
  res.send('About page');
});

app.get('/contact', (req, res) => {
  res.send('Contact page');
});

// 启动服务器
app.listen(port, () => {
  console.log(`Server running at http://localhost:${port}/`);
});

在这个示例中,我们首先引入了 express 模块,并创建了一个 app 实例。然后,我们使用 app.use 方法来设置静态文件目录,其中 'public' 是存放静态文件的文件夹名称。这将允许网站访问该文件夹中的静态资源,例如 CSS 文件、图像等。

接下来,我们定义了几个路由,对应不同的页面。例如,根路径 '/' 对应主页,'/about' 对应关于页面,'/contact' 对应联系页面。当请求到达相应的路径时,服务器将发送相应的响应。

最后,我们使用 app.listen 方法指定服务器监听的端口号,并在服务器启动后打印一条消息到控制台。

  1. 创建静态文件目录:在项目目录下创建一个名为 public 的文件夹,并将网站所需的静态文件(例如 CSS 文件、图像等)放入该文件夹中。
  2. 运行服务器:在终端中,进入到项目目录,并运行以下命令来启动服务器:
node server.js

服务器将在指定的端口上启动,并且可以通过浏览器访问网站的不同页面。

AJAX

AJAX(Asynchronous JavaScript and XML)是一种用于在网页上进行异步数据交互的技术。它允许通过 JavaScript 在不刷新整个页面的情况下,与服务器进行数据交换和更新部分页面内容。

以下是 AJAX 的一些关键概念和工作原理的详细介绍:

1. 异步:AJAX 的核心概念是异步(Asynchronous)。传统的网页请求是同步的,即当用户触发一个请求后,整个页面会被刷新,然后等待服务器响应完成后才能继续操作。而 AJAX 引入了异步请求的概念,可以在后台向服务器发送请求,并在等待响应的同时继续执行其他操作,无需刷新整个页面。

2. XMLHttpRequest 对象:在 JavaScript 中,可以使用 XMLHttpRequest 对象来发起 AJAX 请求。XMLHttpRequest 提供了一种在后台与服务器进行数据交换的方式。它可以发送请求,接收响应,并在页面上更新相关内容。

3. 数据交换格式:尽管 AJAX 中的 "XML" 指的是 XML,但实际上可以使用各种数据交换格式,如 JSON、HTML、纯文本等。通常,现在更常用的是 JSON(JavaScript Object Notation)作为数据交换格式,因为它轻量且易于处理。

4. 事件驱动:AJAX 请求是事件驱动的。通过指定回调函数,可以处理请求的各个阶段,如请求发送、响应接收等。这允许在不同的阶段执行相应的操作,例如更新页面内容或处理错误。

5. 跨域请求:由于浏览器的安全策略,AJAX 请求默认只能向与当前页面位于同一域的服务器发送请求。如果要向不同域的服务器发送请求,需要处理跨域请求(Cross-Origin Resource Sharing,CORS)问题。服务器需要配置允许来自其他域的请求,或者使用代理服务器等方法来解决跨域请求的问题。

6. AJAX 库和框架:为了简化 AJAX 请求的处理和提供更高级的功能,有许多第三方库和框架可用。一些知名的 AJAX 库包括 jQuery 中的 AJAX 方法、axios、Fetch API 等。这些库和框架提供了更简洁的 API 接口、处理跨浏览器兼容性问题、提供更高级的功能(如请求取消、错误处理等)等。

通过使用 AJAX 技术,可以实现以下一些常见的应用场景:

  • 动态加载内容:可以通过 AJAX 在不刷新整个页面的情况下,获取并更新特定部分的内容,例如动态加载评论、更新用户信息等。
  • 表单验证和提交:可以使用 AJAX 异步验证表单数据的有效性,并在验证通过后异步提交表单,以提供更好的用户体验。
  • 实时数据更新:通过定时或推送方式,使用 AJAX 定期或实时地获取服务器上的数据并进行更新,例如聊天应用、股票报价等。
  • 自动完成和搜索建议:在用户输入时,使用 AJAX 异步请求来获取相关的建议和搜索结果,以提供更智能的搜索体验。

场景示例

以下是几个常见的 AJAX 应用场景的例子:

1. 动态加载内容
假设你有一个新闻网站,你希望在用户滚动到页面底部时动态加载更多新闻内容,而无需刷新整个页面。你可以使用 AJAX 发送异步请求到服务器,获取额外的新闻数据,并将其添加到页面中的新闻列表中。这样,用户可以无缝地浏览更多新闻,而不会中断他们的阅读体验。

2. 表单验证和提交
当用户在注册表单或登录表单中输入数据时,你可以使用 AJAX 发送异步请求来验证数据的有效性。例如,你可以检查用户名的唯一性、密码的强度等。如果数据验证通过,你可以使用 AJAX 异步提交表单数据到服务器,而无需刷新整个页面。这样,用户可以立即获得反馈,并且不会丢失他们已经输入的数据。

3. 实时数据更新
假设你正在构建一个在线聊天应用程序,你希望在用户之间传递实时消息。你可以使用 AJAX 发送异步请求到服务器,以定期或通过 WebSocket 等技术接收新消息。当服务器有新消息时,你可以使用 AJAX 将其推送到用户的聊天窗口中,使他们能够实时接收和显示新消息,从而实现实时的聊天体验。

4. 自动完成和搜索建议
当用户在搜索框中输入关键字时,你可以使用 AJAX 发送异步请求到服务器,以获取与关键字相关的建议和搜索结果。服务器可以根据用户的输入返回匹配的结果,并将其作为 AJAX 响应返回给前端。然后,你可以使用 JavaScript 动态更新搜索建议列表,并在用户选择某个建议时,使用 AJAX 发送进一步的请求来获取详细的搜索结果。

代码示例

以下是一个使用纯 JavaScript 实现的简单 AJAX 请求的例子:

// 创建 XMLHttpRequest 对象
var xhr = new XMLHttpRequest();

// 配置 AJAX 请求
xhr.open('GET', '/api/data', true);

// 设置 AJAX 请求完成时的回调函数
xhr.onload = function() {
  if (xhr.status === 200) {
    // 请求成功,处理返回的数据
    var responseData = JSON.parse(xhr.responseText);
    console.log(responseData);
  } else {
    // 请求失败,处理错误
    console.error('AJAX request failed. Status code: ' + xhr.status);
  }
};

// 发送 AJAX 请求
xhr.send();

在这个例子中,我们首先创建了一个 XMLHttpRequest 对象,它是浏览器提供的用于发送 AJAX 请求的内置对象。然后,我们使用 open 方法配置请求,指定请求的类型(GET、POST 等)、URL 和是否异步(true 表示异步)。

接下来,我们通过设置 onload 属性为一个回调函数来定义请求完成时的处理逻辑。这个回调函数将在 AJAX 请求成功完成时被触发。在该函数中,我们首先检查响应的状态码(xhr.status)是否为 200,表示请求成功。然后,我们可以使用 xhr.responseText 来获取服务器返回的响应内容,并进行进一步的处理,例如解析 JSON 数据、更新页面等。在 AJAX 请求的回调函数中,xhr.responseText 是服务器返回的响应内容,通常是一个字符串形式的数据。然而,如果我们知道服务器返回的是 JSON 格式的数据,我们可以使用 JSON.parse() 方法将字符串解析为 JavaScript 对象。

在给定的代码行中,JSON.parse(xhr.responseText) 将服务器返回的响应内容(xhr.responseText)解析为 JavaScript 对象。这样,我们就可以使用 JavaScript 对象的属性和方法来访问和操作这些数据。

如果请求失败,我们可以在 onload 回调函数中处理错误情况,例如打印错误消息到控制台。

最后,我们使用 send 方法发送 AJAX 请求。对于 GET 请求,可以将参数作为 URL 的一部分传递,或者将参数附加到 URL 的查询字符串中(例如 /api/data?param1=value1&param2=value2)。对于 POST 请求,可以在 send 方法中传递请求的主体数据。

这只是一个简单的例子,用于说明 AJAX 请求的基本原理。在实际应用中,还有更多的情况,例如处理不同的请求类型、发送数据、处理请求超时等。此外,许多 JavaScript 库和框架(如 jQuery 的 AJAX 方法、axios、Fetch API 等)提供了更简洁和高级的 API 来处理 AJAX 请求,可以根据具体需求选择适合的工具。

什么是JSON 格式的数据

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,广泛用于前端和后端之间的数据传输。它采用易于阅读和编写的文本格式,并且可以表示复杂的数据结构。

JSON 数据由键值对组成,其中的键必须是字符串,而值可以是字符串、数字、布尔值、对象、数组或者 null。以下是一个示例 JSON 对象的结构:

{
  "name": "John",
  "age": 25,
  "city": "New York",
  "isStudent": true,
  "courses": ["Math", "Science", "History"],
  "address": {
    "street": "123 Main St",
    "city": "New York",
    "zipCode": "10001"
  },
  "isActive": null
}

在上面的例子中,我们有一个包含不同类型值的 JSON 对象。其中,nameagecityisStudent 和 isActive 是字符串、数字、布尔值和 null 类型的值。courses 是一个包含多个字符串元素的数组。address 是一个嵌套的 JSON 对象,它包含了更多的键值对。

JSON 的优点包括易于阅读和编写、易于解析和生成、与多种编程语言兼容等。它已成为现代应用程序中常用的数据交换格式,特别是在 Web 开发中,经常用于前后端之间的数据传输,例如通过 AJAX 请求获取的数据往往以 JSON 格式进行传递。

封装 AJAX

封装 AJAX 的目的是简化 AJAX 请求的操作,并提供更易用和可扩展的接口。下面是一个简单的示例,展示如何封装一个基本的 AJAX 函数:

对于 ajax 函数,包含配置选项的对象作为参数,例如:

ajax({
  method: 'POST',
  url: '/api/data',
  data: JSON.stringify({ name: 'John', age: 25 }),
  success: function(response) {
    console.log('Request succeeded:', response);
  },
  error: function(status) {
    console.error('Request failed. Status:', status);
  }
});

这个 ajax 函数接受一个包含配置选项的对象作为参数,其中的配置选项可以包括以下属性:

  • method(可选):指定请求的方法(如 GET、POST 等)。默认为 GET。
  • url:指定请求的 URL。
  • data(可选):指定请求的主体数据。对于 GET 请求,该属性通常为空,而对于 POST 请求,可以传递要发送的数据。
  • success:请求成功完成时的回调函数。它接受服务器返回的响应内容作为参数。开发者可以在这个回调函数中处理响应数据。
  • error:请求发生错误时的回调函数。它接受请求的状态码作为参数。开发者可以在这个回调函数中处理请求错误情况。

之后封装一个基本的 AJAX 函数:

function ajax(options) {
  var xhr = new XMLHttpRequest();

  // 打开 AJAX 请求
  xhr.open(options.method || 'GET', options.url);

  // 处理请求成功完成时的回调
  xhr.onload = function() {
    if (xhr.status === 200) {
      // 请求成功,调用传入的 success 回调函数并传递响应内容
      options.success(xhr.responseText);
    } else {
      // 请求失败,调用传入的 error 回调函数并传递状态码
      options.error(xhr.status);
    }
  };

  // 处理请求错误时的回调
  xhr.onerror = function() {
    // 请求发生错误,调用传入的 error 回调函数并传递状态码
    options.error(xhr.status);
  };

  // 发送 AJAX 请求,并传递数据(如果存在)
  xhr.send(options.data);
}

在 ajax 函数内部,我们首先创建了一个 XMLHttpRequest 对象,它是浏览器提供的用于发送 AJAX 请求的内置对象。

然后,我们使用 open 方法配置 AJAX 请求。这里使用了 options.method || 'GET' 的写法,表示如果配置选项中没有指定请求方法,默认为 GET。

接下来,我们定义了 onload 事件的处理函数。当请求成功完成时,onload 事件被触发。我们首先检查响应的状态码(xhr.status),如果状态码为 200,表示请求成功。在这种情况下,我们调用传入的 success 回调函数,并将服务器返回的响应内容(xhr.responseText)作为参数传递给它。开发者可以在 success 回调函数中处理和利用响应数据。

如果请求失败,即状态码不是 200,我们调用传入的 error 回调函数,并将状态码作为参数传递给它。开发者可以在 error 回调函数中处理请求失败的情况。

此外,我们还定义了 onerror 事件的处理函数,以处理请求发生错误的情况。在这种情况下,我们同样调用传入的 error 回调函数,并将状态码作为参数传递给它。

最后,我们使用 send 方法发送 AJAX 请求,并将数据(如果存在)作为参数传递。

这只是一个简单的 AJAX 封装示例,可以根据自己的需求扩展它,例如处理请求超时、添加请求头、处理不同类型的数据等。