模式切换
Web 应用构建基础
Web 应用构建基础
Web 应用是指通过浏览器访问的应用程序,它通常包括客户端和服务端的交互。Node.js 提供了强大的工具和模块来开发 Web 应用,尤其适用于需要高并发、高性能的场景。常见的 Web 应用开发基础包括请求与响应、客户端与服务端的概念、URL 和 Querystring 处理、以及通过 HTTP 模块创建服务器等。
Web 应用开发基础
请求与响应
在 Web 应用中,客户端(通常是浏览器)通过发送请求向服务器请求资源,而服务器则通过响应返回数据。请求和响应都包含很多有用的信息,如请求方法、请求头、响应状态、响应数据等。
请求(Request):由客户端发送给服务器的数据,包含了请求的目标地址、请求方法(如 GET、POST)、请求头、请求体等。
响应(Response):由服务器返回给客户端的数据,包含了响应的状态码、响应头、响应体等。
Node.js 提供了丰富的 API 来处理 HTTP 请求和响应,通过 http
模块来实现服务器端的请求和响应处理。
客户端与服务端
客户端:客户端是发起请求的应用程序,通常是浏览器,也可以是其他应用(如移动端应用)。客户端发送请求到服务端,并接收服务器的响应。
服务端:服务端接收客户端发送的请求,处理请求后返回响应。Node.js 可以作为服务端,通过创建 HTTP 服务器来处理请求和响应。
url 和 querystring 模块
Node.js 提供了 url
和 querystring
模块,帮助开发者处理 URL 地址和查询字符串。
url 模块
url
模块用于解析和格式化 URL,支持提取 URL 中的各个部分,如协议、主机、路径、查询参数等。
- url 模块常用方法:
url.parse(urlString)
:将一个 URL 字符串解析为一个 URL 对象。url.format(urlObject)
:将一个 URL 对象转换为字符串。url.resolve(from, to)
:根据基本 URL(from
)解析出目标 URL(to
)。
示例:
javascript
const url = require('url');
// 解析 URL
const myURL = url.parse('https://www.example.com/path?name=JohnDoe&age=25');
console.log(myURL);
// 输出:
// Url {
// protocol: 'https:',
// slashes: true,
// host: 'www.example.com',
// pathname: '/path',
// search: '?name=JohnDoe&age=25',
// query: { name: 'JohnDoe', age: '25' },
// pathname: '/path',
// path: '/path?name=JohnDoe&age=25',
// href: 'https://www.example.com/path?name=JohnDoe&age=25'
// }
querystring 模块
querystring
模块用于解析和格式化 URL 查询字符串(即 URL 中的 ?
后部分),它能够将查询字符串转换为对象,或者将对象转换为查询字符串。
- querystring 模块常用方法:
querystring.parse(str)
:解析查询字符串并返回一个对象。querystring.stringify(obj)
:将对象转换为查询字符串。
示例:
javascript
const querystring = require('querystring');
// 解析查询字符串
const query = querystring.parse('name=JohnDoe&age=25');
console.log(query);
// 输出:{ name: 'JohnDoe', age: '25' }
// 将对象转换为查询字符串
const str = querystring.stringify({ name: 'JaneDoe', age: 30 });
console.log(str);
// 输出:name=JaneDoe&age=30
http 模块
http
模块是 Node.js 中最常用的模块之一,用于创建 HTTP 服务端和客户端。它提供了处理 HTTP 请求和响应的功能,使 Node.js 能够快速地构建 Web 应用。
server 对象
http.createServer()
方法用于创建一个 HTTP 服务器,服务器将会监听客户端的请求并返回响应。
javascript
const http = require('http');
const server = http.createServer((req, res) => {
res.statusCode = 200; // 设置响应状态码
res.setHeader('Content-Type', 'text/plain'); // 设置响应头
res.end('Hello, World!\n'); // 发送响应内容
});
server.listen(3000, '127.0.0.1', () => {
console.log('Server running at http://127.0.0.1:3000/');
});
在上述代码中,createServer
方法创建了一个 HTTP 服务器。每次客户端请求时,服务器会执行回调函数,并返回一个 res
(响应)对象,客户端的请求通过 req
(请求)对象进行处理。
request 对象
request
对象包含了客户端发送的所有信息,包括请求方法、请求 URL、请求头等。
- 常用属性:
req.method
:请求方法(如 GET、POST)。req.url
:请求的 URL。req.headers
:请求头信息。
response 对象
response
对象用于向客户端发送数据,通常包括设置响应状态码、响应头和响应体。
- 常用方法:
res.statusCode
:设置响应状态码。res.setHeader(name, value)
:设置响应头。res.end()
:结束响应并将数据发送给客户端。
path 模块
path
模块用于处理和操作文件和目录路径。它可以帮助开发者处理文件路径、拼接路径、解析路径等。
路径和相对路径
- 路径:路径是文件系统中文件的位置标识,分为绝对路径和相对路径。
- 绝对路径:从文件系统的根目录开始,如
/home/user/file.txt
。 - 相对路径:相对于当前工作目录的路径,如
./file.txt
。
- 绝对路径:从文件系统的根目录开始,如
path 模块的常见操作
path.join([...paths])
:拼接多个路径成一个完整的路径。path.resolve([...paths])
:将路径解析为绝对路径。path.dirname(path)
:返回路径的目录部分。path.basename(path)
:返回路径的文件名部分。path.extname(path)
:返回路径的扩展名部分。
示例:
javascript
const path = require('path');
// 拼接路径
console.log(path.join('/home', 'user', 'file.txt')); // 输出:/home/user/file.txt
// 解析绝对路径
console.log(path.resolve('file.txt')); // 输出:/current/working/directory/file.txt
// 获取目录名
console.log(path.dirname('/home/user/file.txt')); // 输出:/home/user
// 获取文件名
console.log(path.basename('/home/user/file.txt')); // 输出:file.txt
// 获取扩展名
console.log(path.extname('file.txt')); // 输出:.txt
path 模块的属性
path.sep
:表示平台特定的路径分隔符(Windows 是\
,Unix/Linux 是/
)。path.delimiter
:表示平台特定的路径分隔符(Windows 是;
,Unix/Linux 是:
)。