Nodejs之http的表单提交

首先,在Node.js中,通过使用内置的http模块,我们可以轻松地创建一个Web服务器。本文将围绕如何实现HTTP表单提交展开,先介绍如何在Node.js中创建一个简单的Web服务器,然后展示如何接收并处理表单提交数据。

创建Web服务器

我们先来看一下如何使用Node.js的http模块创建一个简单的Web服务器,示例代码如下:

const http = require('http');

const server = http.createServer((req, res) => {
  res.writeHead(200, {'Content-Type': 'text/html; charset=utf-8'});
  res.write('<h1>Hello, World!</h1>');
  res.end();
});

server.listen(3000, () => {
  console.log('Server is running on http://localhost:3000');
});

上面的代码中,我们调用了Node.js内置的http模块,并使用该模块提供的createServer()方法创建了一个基本的Web服务器。createServer()方法接受一个回调函数,该函数接收两个参数:请求对象(req)和响应对象(res)。我们在回调函数中先调用res.writeHead()方法设置响应头信息,然后调用res.write()方法写入响应内容,最后调用res.end()方法结束响应。

在本地运行上述代码后,访问http://localhost:3000,我们可以看到浏览器输出“Hello, World!”。

接收表单数据

接下来我们来看如何接收HTTP表单提交数据。在HTTP协议中,表单提交数据默认以POST方式发送,Node.js可以通过解析请求体数据来获取表单提交数据。

const http = require('http');
const {parse} = require('querystring');

const server = http.createServer((req, res) => {
  if (req.method === 'POST') {
    let body = '';
    req.on('data', chunk => {
      body += chunk.toString();
    });
    req.on('end', () => {
      const data = parse(body);
      res.writeHead(200, {'Content-Type': 'text/html; charset=utf-8'});
      res.write(`<h1>Hello, ${data.name}!</h1>`);
      res.end();
    });
  } else {
    res.writeHead(200, {'Content-Type': 'text/html; charset=utf-8'});
    res.write(`
      <form method="POST">
        <label>
          Your name:
          <input type="text" name="name" />
        </label>
        <br/>
        <br/>
        <button type="submit">Submit</button>
      </form>
    `);
    res.end();
  }
});

server.listen(3000, () => {
  console.log('Server is running on http://localhost:3000');
});

上述代码中,我们通过判断请求的方法是否为POST来区分表单提交请求和普通GET请求。当请求为POST时,我们通过data事件和end事件分别接收请求体数据,并使用Node.js内置的querystring模块解析表单数据。

最后,我们在响应中动态生成HTML表单,使用label和input元素收集用户输入的数据,并将数据通过POST方式提交到Web服务器。当收到表单提交的请求时,我们将表单数据解析出来,并动态生成响应体数据。

示例说明

示例1:计算正方形面积

下面的示例演示如何使用表单收集用户输入数据,并计算正方形的面积。

const http = require('http');
const {parse} = require('querystring');

const server = http.createServer((req, res) => {
  if (req.method === 'POST') {
    let body = '';
    req.on('data', chunk => {
      body += chunk.toString();
    });
    req.on('end', () => {
      const data = parse(body);
      const side = parseInt(data.side, 10);
      const area = Math.pow(side, 2);
      res.writeHead(200, {'Content-Type': 'text/html; charset=utf-8'});
      res.write(`<h1>The area of the square is ${area}</h1>`);
      res.end();
    });
  } else {
    res.writeHead(200, {'Content-Type': 'text/html; charset=utf-8'});
    res.write(`
      <form method="POST">
        <label>
          Side length:
          <input type="number" name="side" />
        </label>
        <br/>
        <br/>
        <button type="submit">Submit</button>
      </form>
    `);
    res.end();
  }
});

server.listen(3000, () => {
  console.log('Server is running on http://localhost:3000');
});

在浏览器中访问http://localhost:3000,我们可以看到生成的表单,输入正方形的边长,点击'提交'按钮,服务器返回计算结果。

示例2:注册账号

下面的示例演示如何使用表单收集用户的注册信息,并将用户信息保存到数据库中。

const http = require('http');
const {parse} = require('querystring');
const mysql = require('mysql');

const connection = mysql.createConnection({
  host: 'localhost',
  user: 'root',
  password: 'password',
  database: 'testdb'
});

const server = http.createServer((req, res) => {
  if (req.method === 'POST') {
    let body = '';
    req.on('data', chunk => {
      body += chunk.toString();
    });
    req.on('end', () => {
      const data = parse(body);
      const username = data.username;
      const password = data.password;
      connection.query(`INSERT INTO users (username, password) VALUES ('${username}', '${password}')`, (error, result) => {
        if (error) {
          console.log(error);
          res.writeHead(500, {'Content-Type': 'text/plain'});
          res.write('Oops, something went wrong!');
          res.end();
        } else {
          res.writeHead(201, {'Content-Type': 'text/html; charset=utf-8'});
          res.write(`<h1>You have successfully registered an account with username ${username}</h1>`);
          res.end();
        }
      });
    });
  } else {
    res.writeHead(200, {'Content-Type': 'text/html; charset=utf-8'});
    res.write(`
      <form method="POST">
        <label>
          Username:
          <input type="text" name="username" />
        </label>
        <br/>
        <br/>
        <label>
          Password:
          <input type="password" name="password" />
        </label>
        <br/>
        <br/>
        <button type="submit">Sign up</button>
      </form>
    `);
    res.end();
  }
});

server.listen(3000, () => {
  console.log('Server is running on http://localhost:3000');
});

在这个示例中,我们使用了mysql模块连接MySQL数据库,并在表单提交成功后将用户信息插入到数据库中。需要注意,上述示例代码中使用了明文的SQL语句,这是非常不安全的,我们应该使用参数化查询或ORM库来避免SQL注入攻击。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Nodejs之http的表单提交 - Python技术站

(0)
上一篇 2023年6月8日
下一篇 2023年6月8日

相关文章

  • 充分发挥Node.js程序性能的一些方法介绍

    关于“充分发挥Node.js程序性能的一些方法介绍”,我整理了以下几个方面的方法,具体内容如下: 1. 选择合适的Node.js版本 选择合适的Node.js版本可以显著提高性能和稳定性。通常选最新的Node.js版本是最佳实践,因为它们通常包含最新的优化和修复。但是,如果以前发布的Node.js版本更适合特定的应用程序,则将其用于生产环境、测试或开发环境是…

    node js 2023年6月8日
    00
  • NodeJS学习笔记之(Url,QueryString,Path)模块

    下面是关于“NodeJS学习笔记之(Url,QueryString,Path)模块”的完整攻略: 什么是Url,QueryString和Path? 在介绍Url,QueryString和Path模块之前,我们先来了解一下他们的概念: Url: 统一资源定位符,是指向互联网“资源”的指针。 QueryString: 查询字符串,是Url中问号后面的部分,包括多…

    node js 2023年6月8日
    00
  • 详解利用nodejs对本地json文件进行增删改查

    下面是详解利用Node.js对本地JSON文件进行增删改查的完整攻略。 1. 使用Node.js读取本地JSON文件 在Node.js中读取本地JSON文件需要用到fs(文件系统)模块。在读取JSON文件之前,首先需要在项目中安装fs模块。安装命令为: npm install fs –save 下面是一个读取本地JSON文件的示例: const fs = …

    node js 2023年6月8日
    00
  • 深入nodejs中流(stream)的理解

    理解 Node.js 中的流(stream)非常重要,因为在处理大量数据或网络流时,流是一种高效而可靠的方式。本文将深入介绍 Node.js 中的流概念和使用方法,包括流的类型、创建和使用流、以及流的事件和操作。 流的类型 在 Node.js 中,流可以分为四类: 可读流(Readable Stream):从源头读取数据。 可写流(Writable Stre…

    node js 2023年6月8日
    00
  • 教你如何用Node实现API的转发(某音乐)

    下面是详细讲解“教你如何用Node实现API的转发(某音乐)”的完整攻略。 1. 确定目标API 首先需要确定需要转发的目标API,以某音乐API为例,我们可以在其官方文档中找到需要使用的API。通常我们需要关注的信息有API的地址、请求方法、请求参数、请求头等。 2. 创建Node.js应用程序 接下来,我们需要创建一个基于Node.js的应用程序,用于实…

    node js 2023年6月8日
    00
  • NodeJS模块Buffer原理及使用方法解析

    NodeJS模块Buffer原理及使用方法解析 什么是Buffer Buffer是Node.js提供的一个用于处理二进制数据的类,它是一个全局的构造函数,用于在Node.js中存储二进制数据。Buffer对象类似于整数数组,但它对应于V8堆内存之外的一块原始内存。 在Node.js中,二进制数据经常被传输和操作,例如读取文件、网络I/O等。Buffer类提供…

    node js 2023年6月8日
    00
  • nw.js实现类似微信的聊天软件

    要实现类似微信的聊天软件,可以使用nw.js来构建跨平台应用程序。下面是实现的完整攻略: 准备工作 下载安装node.js,然后在命令行工具中输入以下命令,检查是否安装成功。 node -v npm -v 下载安装nw.js,并解压到本地文件夹,用于后续开发。 创建工程 在本地空文件夹中创建package.json文件,用于管理开发依赖。 { "n…

    node js 2023年6月8日
    00
  • node.js中的url.resolve方法使用说明

    Node.js中的url.resolve方法使用说明 什么是url.resolve方法? url.resolve(from, to) 方法接受两个参数,from 和 to,并返回通过将 to 解析在 from 上得到的绝对 URL。 使用方法 const url = require(‘url’); const myUrl = url.resolve(‘htt…

    node js 2023年6月8日
    00
合作推广
合作推广
分享本页
返回顶部