RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 1229271
Accepted
Александр
Александр
Asked:2022-01-10 14:55:12 +0000 UTC2022-01-10 14:55:12 +0000 UTC 2022-01-10 14:55:12 +0000 UTC

在服务器上获取客户端数据

  • 772

有一个 index.html 文件没有什么特别的,但是有一个homePageHadnler.js.
该文件包含几个用于检查数据输入的函数,当所有检查都成功通过时,必须调用另一个文件中包含用于生成 SQL 查询的函数的方法。

homePageHadnler.js 代码:

function handlerReg() {
    const login = document.forms.reg.login
    const password = document.forms.reg.password

    const args = [login, password]

    //..

    checkErrors(args)
}

async function checkErrors(args) {
    const errors = document.forms.reg.querySelectorAll('.error')

    if (errors.length === 0) {
        let response = await fetch('./database/sqlBilder', {
        method: 'POST',
        body: 'name=Vasya'
        })

        if (response.ok) {
            alert("Запрос выполнен: " + response.status);
        } else {
            alert("Ошибка HTTP: " + response.status);
        }
    }
}

包含的文件代码:

const pool = require('./database/pool')

function query (code, table, args){
    if (code === 1){
        let query = `INSERT INTO ${table} VALUES (${args})`
        console.log(query)
        return query
    }
}

根据评论的建议,我写了一个ajax请求。他成功地说他能够到达所需的页面(状态 = 200),但没有返回任何内容,也没有打印到控制台。

那么如何值得更改此代码以便通过请求发送整个参数集(我认为将其作为字典进行,但我不确定它是否正确),最重要的是,如何获取数据在 SQL 查询形成页面上?

PS:目前如果我将输出放在服务器上的控制台中

console.log('Строка аргументов: ' + request.body)

返回undefined。

javascript
  • 1 1 个回答
  • 10 Views

1 个回答

  • Voted
  1. Best Answer
    nörbörnën
    2022-01-11T18:44:58Z2022-01-11T18:44:58Z

    在服务器上

    • 必须连接body-parser

    • 必须指定适当的处理程序(在示例中 - app.post('/', ...))

    
    const path = require('path');
    const express = require('express');
    const bodyParser = require('body-parser');
    
    const app = express();
    
    app.use(bodyParser.urlencoded({ extended: true }));
    app.use(bodyParser.json());
    
    app.set('view engine', 'ejs');
    app.set('views', path.join(process.cwd(), 'views'));
    
    
    app.get('/', (req, res) => {
      res.render('index', {});
    });
    
    app.post('/', (req, res) => {
      res.json({
        query: req.query,
        body: req.body
      });
    });
    
    
    const port = 3000;
    const hostname = 'localhost';
    app.listen(port, hostname, () => {
      console.log(`Example app listening at http://localhost:${port}`);
    });
    

    从客户端发送数据submitFetch:

        <script type="text/javascript">
          function getFormData() {
            const formEl = document.getElementById('exampleForm');
            const formData = new FormData(formEl);
            return formData;
          }
    
          function getFormDataJSON() {
            const formData = getFormData();
            const plainFormData = Object.fromEntries(formData.entries());
            const formDataJsonString = JSON.stringify(plainFormData);
            return formDataJsonString;
          }
    
          async function submitFetch(ev) {
            const btn = ev.target;
    
            ev.preventDefault();
            btn.setAttribute('disabled', true);
            
            let json;
            try {
              const formData = getFormDataJSON();
              const response = await fetch(
                '/',
                {
                  method: 'POST',
                  body: formData,
                  headers: {
                    'Content-Type': 'application/json',
                    'Accept': 'application/json'
                  }
                }
              );
    
              if (!response.ok) {
                throw Error(response.statusText || 'Something wrong');
              }
    
              json = await response.json();
            } catch (err) {
              console.error(err);
            }
    
            btn.removeAttribute('disabled');
    
            document.getElementById('exampleConsole').innerText = JSON.stringify(json, null, 2);
          }
        </script>
    

    项目结构:

    发射npm run start

    package.json

    {
      "name": "http-server-for-static",
      "version": "0.0.1",
      "main": "src/index.js",
      "license": "MIT",
      "scripts": {
        "start": "nodemon --watch src ./src/index.js"
      },
      "dependencies": {
        "body-parser": "^1.19.0",
        "ejs": "^3.1.5",
        "express": "^4.17.1"
      },
      "devDependencies": {
        "@types/body-parser": "^1.19.0",
        "@types/ejs": "^3.0.5",
        "@types/express": "^4.17.9",
        "@types/node": "^14.14.20",
        "nodemon": "^2.0.7"
      },
      "engines": {
        "node": ">=12.0.0"
      }
    }

    src/index.js

    const path = require('path');
    const express = require('express');
    const bodyParser = require('body-parser');
    
    const app = express();
    
    app.use(bodyParser.urlencoded({ extended: true }));
    app.use(bodyParser.json());
    
    app.set('view engine', 'ejs');
    app.set('views', path.join(process.cwd(), 'views'));
    
    
    app.get('/', (req, res) => {
      res.render('index', {});
    });
    
    app.post('/', (req, res) => {
      res.json({
        query: req.query,
        body: req.body
      });
    });
    
    
    const port = 3000;
    const hostname = 'localhost';
    app.listen(port, hostname, () => {
      console.log(`Example app listening at http://localhost:${port}`);
    });

    views/index.ejs

    <!doctype html>
    <html lang="en">
      <head>
        <meta charset="utf-8">
        <title>Example Page</title>
        <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
    
        <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.5.3/dist/css/bootstrap.min.css" integrity="sha384-TX8t27EcRE3e/ihU7zmQxVncDAy5uIKz4rEkgIXeMed4M0jlfIDPvg6uqKI2xXr2" crossorigin="anonymous">
        <style type="text/css">
          html, body {
            height: 100%;
          }
        </style>
    
        <script type="text/javascript">
          function getFormData() {
            const formEl = document.getElementById('exampleForm');
            const formData = new FormData(formEl);
            return formData;
          }
    
          function getFormDataJSON() {
            const formData = getFormData();
            const plainFormData = Object.fromEntries(formData.entries());
            const formDataJsonString = JSON.stringify(plainFormData);
            return formDataJsonString;
          }
    
          async function submitFetch(ev) {
            const btn = ev.target;
    
            ev.preventDefault();
            btn.setAttribute('disabled', true);
            
            let json;
            try {
              const formData = getFormDataJSON();
              const response = await fetch(
                window.location.href || '/',
                {
                  method: 'POST',
                  body: formData,
                  headers: {
                    'Content-Type': 'application/json',
                    'Accept': 'application/json'
                  }
                }
              );
    
              if (!response.ok) {
                throw Error(response.statusText || 'Something wrong');
              }
    
              json = await response.json();
            } catch (err) {
              console.error(err);
            }
    
            btn.removeAttribute('disabled');
    
            document.getElementById('exampleConsole').innerText = JSON.stringify(json, null, 2);
          }
        </script>
      </head>
      <body>
        <div class="h-100">
          <div class="container h-100">
            <div class="d-flex align-items-center justify-content-center h-100">
              <div class="d-flex flex-column">
                <div class="text align-self-center p-2">
    
                  <form method="post" enctype="multipart/form-data" id="exampleForm">
                    <div class="mb-3">
                      <label for="exampleAccount" class="form-label">Account</label>
                      <input type="text" name="account" class="form-control" id="exampleAccount">
                    </div>
                    <div class="mb-3">
                      <label for="examplePassword" class="form-label">Password</label>
                      <input type="password" name="password" class="form-control" id="examplePassword">
                    </div>
                    <button type="button" class="btn btn-outline-primary" onclick="submitFetch(event)">Submit</button>
                  </form>
    
                </div>
              </div>
              <div class="d-flex flex-column">
                <div class="text align-self-center p-2">
                  <pre style="font-size: 10px" class="mt-3" id="exampleConsole"></pre>
                </div>
              </div>
            </div>
          </div>
        </div>
      </body>
    </html>

    • 2

相关问题

  • 第二个 Instagram 按钮的 CSS 属性

  • 由于模糊,内容不可见

  • 弹出队列。消息显示不正确

  • 是否可以在 for 循环中插入提示?

  • 如何将 JSON 请求中的信息输出到数据表 Vuetify vue.js?

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    表格填充不起作用

    • 2 个回答
  • Marko Smith

    提示 50/50,有两个,其中一个是正确的

    • 1 个回答
  • Marko Smith

    在 PyQt5 中停止进程

    • 1 个回答
  • Marko Smith

    我的脚本不工作

    • 1 个回答
  • Marko Smith

    在文本文件中写入和读取列表

    • 2 个回答
  • Marko Smith

    如何像屏幕截图中那样并排排列这些块?

    • 1 个回答
  • Marko Smith

    确定文本文件中每一行的字符数

    • 2 个回答
  • Marko Smith

    将接口对象传递给 JAVA 构造函数

    • 1 个回答
  • Marko Smith

    正确更新数据库中的数据

    • 1 个回答
  • Marko Smith

    Python解析不是css

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5