📜  Node.js-Web模块(1)

📅  最后修改于: 2023-12-03 15:33:10.973000             🧑  作者: Mango

Node.js Web模块

Node.js是基于Chrome V8的JavaScript运行时环境,Node.js拥有强大的Web模块,它使得我们能够创建高效稳定的Web应用程序,同时Node.js还支持异步I/O操作,可以更好地支持高并发。

HTTP模块

HTTP模块是Node.js Web模块中最核心的模块,它可以用来创建一个HTTP服务器或者客户端。

创建HTTP服务器
const http = require('http');

// 创建服务器
const server = http.createServer((req, res) => {
  // 设置响应头
  res.writeHead(200, {'Content-Type': 'text/plain'});

  // 发送响应数据 "Hello World"
  res.end('Hello World\n');
});

// 监听端口
server.listen(3000,() => {
  console.log('Server running at http://127.0.0.1:3000/');
});

这是一个简单的HTTP服务器示例,当客户端访问http://127.0.0.1:3000/时,服务器会响应一个"Hello World"字符串。

发送HTTP请求
const http = require('http');

// 发送请求
const req = http.request({
  hostname: '127.0.0.1',
  port: 3000,
  path: '/',
  method: 'GET'
}, (res) => {
  // 接收响应数据
  res.on('data', (chunk) => {
    console.log(`BODY: ${chunk}`);
  });
});

// 结束请求
req.end();

这是一个发送HTTP请求的示例,它向http://127.0.0.1:3000/发送一个GET请求,并输出响应数据。

HTTPS模块

HTTPS模块是Node.js Web模块中用于创建HTTPS服务器或客户端的模块。

创建HTTPS服务器
const https = require('https');
const fs = require('fs');

// 加载密钥和证书
const options = {
  key: fs.readFileSync('key.pem'),
  cert: fs.readFileSync('cert.pem')
};

// 创建服务器
const server = https.createServer(options, (req, res) => {
  // 设置响应头
  res.writeHead(200, {'Content-Type': 'text/plain'});

  // 发送响应数据 "Hello World"
  res.end('Hello World\n');
});

// 监听端口
server.listen(3000,() => {
  console.log('Server running at https://127.0.0.1:3000/');
});

这是一个简单的HTTPS服务器示例,当客户端访问https://127.0.0.1:3000/时,服务器会响应一个"Hello World"字符串。

发送HTTPS请求
const https = require('https');
const fs = require('fs');

// 加载密钥和证书
const options = {
  key: fs.readFileSync('key.pem'),
  cert: fs.readFileSync('cert.pem')
};

// 发送请求
const req = https.request({
  hostname: '127.0.0.1',
  port: 3000,
  path: '/',
  method: 'GET',
  key: fs.readFileSync('client.key'),
  cert: fs.readFileSync('client.crt')
}, (res) => {
  // 接收响应数据
  res.on('data', (chunk) => {
    console.log(`BODY: ${chunk}`);
  });
});

// 结束请求
req.end();

这是一个发送HTTPS请求的示例,它向https://127.0.0.1:3000/发送一个GET请求,并输出响应数据。

路由模块

路由是Web开发中非常重要的概念,它用于将请求URL映射到处理程序上。

const http = require('http');

// 创建路由表
const routes = {
  '/': (req, res) => {
    res.writeHead(200, {'Content-Type': 'text/plain'});
    res.end('Hello World');
  },
  '/about': (req, res) => {
    res.writeHead(200, {'Content-Type': 'text/plain'});
    res.end('About Us');
  }
};

// 创建服务器
const server = http.createServer((req, res) => {
  if (routes[req.url]) {
    // 如果请求URL在路由表中,则调用对应的处理程序
    routes[req.url](req, res);
  } else {
    // 否则返回404错误
    res.writeHead(404, {'Content-Type': 'text/plain'});
    res.end('404 Not Found');
  }
});

// 监听端口
server.listen(3000, () => {
  console.log('Server running at http://127.0.0.1:3000/');
});

这是一个简单的路由示例,它将请求URL映射到不同的处理程序上。

实现Web应用程序

使用Node.js Web模块可以非常容易地开发出一个Web应用程序,下面是一个示例程序:

const http = require('http');
const url = require('url');
const qs = require('querystring');
const fs = require('fs');

// 创建路由表
const routes = {
  '/': (req, res) => {
    if (req.method === 'POST') {
      // 处理POST请求
      let body = '';

      req.on('data', (chunk) => {
        body += chunk;
      });

      req.on('end', () => {
        const data = qs.parse(body);
        const name = data.name || 'World';

        res.writeHead(200, {'Content-Type': 'text/html'});
        res.end(`<html><body><h1>Hello, ${name}!</h1><form method="POST" action="/"><input type="text" name="name"><input type="submit" value="Submit"></form></body></html>`);
      });
    } else {
      // 处理GET请求
      const name = url.parse(req.url, true).query.name || 'World';

      res.writeHead(200, {'Content-Type': 'text/html'});
      res.end(`<html><body><h1>Hello, ${name}!</h1><form method="POST" action="/"><input type="text" name="name"><input type="submit" value="Submit"></form></body></html>`);
    }
  },
  '/about': (req, res) => {
    const data = fs.readFileSync('about.html', {encoding: 'utf8'});

    res.writeHead(200, {'Content-Type': 'text/html'});
    res.end(data);
  }
};

// 创建服务器
const server = http.createServer((req, res) => {
  if (routes[req.url]) {
    // 如果请求URL在路由表中,则调用对应的处理程序
    routes[req.url](req, res);
  } else {
    // 否则返回404错误
    res.writeHead(404, {'Content-Type': 'text/plain'});
    res.end('404 Not Found');
  }
});

// 监听端口
server.listen(3000, () => {
  console.log('Server running at http://127.0.0.1:3000/');
});

这是一个简单的Web应用程序,它可以处理GET和POST请求,并返回一个HTML页面。