Node.js 知识量:9 - 37 - 115
在Node.js中,可以使用内置的HTTP模块来创建服务器,并处理不同的HTTP请求方法。下面是一个简单的示例,演示了如何使用Node.js实现GET和POST请求方法:
const http = require('http'); const server = http.createServer((req, res) => { // 获取请求方法 const method = req.method; // 根据请求方法执行相应的操作 switch (method) { case 'GET': // 处理GET请求 res.writeHead(200, { 'Content-Type': 'text/plain' }); res.end('Hello, GET!'); break; case 'POST': // 处理POST请求 res.writeHead(200, { 'Content-Type': 'text/plain' }); res.end('Hello, POST!'); break; default: // 处理其他请求方法 res.writeHead(405, { 'Content-Type': 'text/plain' }); res.end('Method Not Allowed'); } }); // 监听端口并启动服务器 server.listen(3000, () => { console.log('Server started on port 3000'); });
在这个示例中,使用http.createServer()方法创建了一个HTTP服务器。在回调函数中,通过req.method获取请求方法的字符串表示形式,然后使用switch语句根据不同的请求方法执行相应的操作。对于GET和POST请求,只是简单地返回一个响应,对于其他请求方法,返回一个405状态码表示方法不被允许。
在Node.js中,可以使用请求对象的url属性或path属性来获取请求的路径,并根据路径进行相应的处理。以下是一个简单的示例:
const http = require('http'); const server = http.createServer((req, res) => { // 获取请求路径 const path = req.url || req.path; // 根据路径执行相应的操作 switch (path) { case '/': // 处理根路径请求 res.writeHead(200, { 'Content-Type': 'text/plain' }); res.end('Hello, root!'); break; case '/about': // 处理/about路径请求 res.writeHead(200, { 'Content-Type': 'text/plain' }); res.end('About page'); break; default: // 处理其他路径请求 res.writeHead(404, { 'Content-Type': 'text/plain' }); res.end('Not Found'); } }); // 监听端口并启动服务器 server.listen(3000, () => { console.log('Server started on port 3000'); });
在这个示例中,通过req.url或req.path获取请求的路径,并根据路径执行相应的操作。如果请求的路径是根路径/,返回一个欢迎消息;如果请求的路径是/about,返回一个关于页面的内容;对于其他路径,返回一个404状态码表示未找到。
在Node.js中,可以使用内置的querystring模块来解析和操作查询字符串。以下是一个简单的示例,演示了如何使用querystring模块来解析查询字符串并提取参数:
const querystring = require('querystring'); const http = require('http'); const server = http.createServer((req, res) => { // 获取查询字符串 const query = querystring.parse(req.url.split('?')[1]); // 提取参数 const foo = query.foo; const baz = query.baz; // 根据参数执行相应的操作 if (foo === 'bar' && baz === 'val') { res.writeHead(200, { 'Content-Type': 'text/plain' }); res.end('Parameters matched!'); } else { res.writeHead(400, { 'Content-Type': 'text/plain' }); res.end('Parameters did not match'); } }); // 监听端口并启动服务器 server.listen(3000, () => { console.log('Server started on port 3000'); });
在这个示例中,首先使用querystring.parse()方法解析查询字符串,然后通过req.url.split('?')[1]获取查询字符串。然后,使用querystring.parse()方法将查询字符串解析为一个对象,并从中提取参数。最后,根据参数的值执行相应的操作。
在Node.js中,可以使用内置的http模块来创建服务器,并通过res.setHeader()方法设置Cookie。以下是一个简单的示例,演示了如何设置和读取Cookie:
const http = require('http'); const server = http.createServer((req, res) => { // 设置Cookie res.setHeader('Set-Cookie', ['foo=bar', 'baz=val']); // 读取Cookie const cookies = req.headers['cookie']; if (cookies) { const cookieValues = cookies.split('; ').map(cookie => cookie.split('=')[1]); console.log('Cookies:', cookieValues); } // 返回响应 res.writeHead(200, { 'Content-Type': 'text/plain' }); res.end('Hello, World!'); }); // 监听端口并启动服务器 server.listen(3000, () => { console.log('Server started on port 3000'); });
在这个示例中,首先使用res.setHeader()方法设置Cookie。该方法接受两个参数:Cookie的名称和值。可以通过传递一个包含多个Cookie的数组来设置多个Cookie。然后,可以通过req.headers['cookie']读取请求头中的Cookie。该属性返回一个包含所有Cookie的字符串,可以通过将其分割和解析来获取每个Cookie的值。最后,返回一个简单的响应,并在控制台中打印出读取到的Cookie值。
在Node.js中,可以使用内置的http模块和express框架来实现会话(Session)功能。以下是一个简单的示例,演示了如何使用express-session中间件来管理会话:
const express = require('express'); const session = require('express-session'); const http = require('http'); const app = express(); // 配置会话中间件 app.use(session({ secret: 'your_secret_key', // 用于签名会话ID cookie的密钥 resave: false, // 强制将会话保存回会话存储区,即使会话在请求期间未被修改。 saveUninitialized: true, // 强制将未修改的会话保存到存储区。新创建的未修改的会话将不会被保存。 cookie: { secure: true } // 强制使用安全cookie,仅在HTTPS连接上发送。 })); // 在这里添加路由处理程序和其他中间件... // 创建HTTP服务器并监听端口 const server = http.createServer(app); server.listen(3000, () => { console.log('Server started on port 3000'); });
在这个示例中,首先通过require('express')和require('express-session')引入所需的模块。然后,使用app.use()方法将express-session中间件添加到应用程序中。在中间件的配置对象中,指定了会话的密钥、是否强制保存会话以及Cookie的安全选项。接下来,可以添加路由处理程序和其他中间件来处理请求和响应。最后,使用http.createServer()方法创建HTTP服务器,并通过监听指定的端口来启动服务器。
在Node.js中,可以使用不同的缓存库来实现缓存功能,如node-cache、redis等。以下是一个使用node-cache库的简单示例:
首先,需要通过npm安装node-cache库:
npm install node-cache
然后,可以在代码中使用它:
const NodeCache = require('node-cache'); // 创建一个缓存实例 const myCache = new NodeCache({ stdTTL: 5 }); // 这里的5表示缓存有效期为5秒 // 获取缓存数据 const cachedData = myCache.get('key'); if (cachedData) { console.log('Cached data found:', cachedData); } else { // 获取数据并缓存 const data = fetchDataFromDatabase(); // 假设fetchDataFromDatabase是一个获取数据的函数 myCache.set('key', data); // 将数据缓存起来 console.log('Cached data:', data); }
在这个示例中,首先通过require('node-cache')引入node-cache库,并创建一个缓存实例。然后,使用myCache.get()方法获取缓存数据。如果缓存中存在数据,则直接返回数据;否则,从数据库或其他来源获取数据,并将其缓存起来。可以根据自己的需求选择合适的数据来源和缓存策略。
Basic认证是当客户端与服务器端进行请求时,允许通过用户名和密码实现的一种身份认证方式。在Node.js中,可以使用内置的http模块和querystring模块来实现基本的HTTP认证。以下是一个简单的示例,演示了如何使用http模块发送带有基本认证的请求:
const http = require('http'); const querystring = require('querystring'); const username = 'your_username'; const password = 'your_password'; const options = { hostname: 'example.com', port: 80, path: '/path', method: 'GET', headers: { 'Authorization': 'Basic ' + new Buffer(username + ':' + password).toString('base64') } }; const req = http.request(options, (res) => { let data = ''; // 读取响应数据 res.on('data', (chunk) => { data += chunk; }); res.on('end', () => { console.log(JSON.parse(data)); // 打印响应数据 }); }); req.on('error', (error) => { console.error(error); }); req.end();
在这个示例中,首先引入了http和querystring模块。然后,设置了请求的选项,包括主机名、端口、路径、方法和请求头。在请求头中,使用Authorization字段来发送基本认证信息。将用户名和密码连接起来,并使用Buffer和toString('base64')方法将其转换为Base64编码的字符串。最后,使用http.request()方法发送请求,并在响应数据读取完成后打印响应数据。
Copyright © 2017-Now pnotes.cn. All Rights Reserved.
编程学习笔记 保留所有权利
MARK:3.0.0.20240214.P35
From 2017.2.6