如何将数据从 hbs (html) 传递到 axios 发布请求?

Posted

技术标签:

【中文标题】如何将数据从 hbs (html) 传递到 axios 发布请求?【英文标题】:How do I pass data from hbs (html) to axios post request? 【发布时间】:2019-09-02 18:25:31 【问题描述】:

对 nodejs 和 express 非常陌生。

当按下“提交”按钮时,我想将作为电子邮件的用户输入数据发送到 axios.post 请求的数据。 我检查了 axios 请求中的硬编码数据工作正常。

data_email.hbs

<!DOCTYPE html>
<html>
<head>
    <link rel="stylesheet" href="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.1/css/bootstrap.min.css">
    <script src="//maxcdn.bootstrapcdn.com/bootstrap/3.3.1/js/bootstrap.min.js"></script>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
</head>
<body>
    <div>
        <div>
            <nav class="navbar navbar-inverse" role="navigation" style="padding-left:130px;">
                <ul class="nav navbar-nav">
                    <li><a href="/home">Home</a></li>
                    <li><a href="/about">About us</a></li>
                    <li class="active"><a href="/data_email">Data by Email<span class="sr-only">(current)</span></a></li>    
                </ul>
            </nav>
        </div>

        <div class="container">
            <h3>Employee Data Search</h3>
            <label for="email">Enter the employee's cloud-spartan.com email</label></br>
            <input type="email" id="email" size="30">
            <input type="submit" value="search">
            <div class ="employee-data">
                (data)
            </div>
        </div><!-- container -->
    </div>
</body>
</html>    

server.js

app.get("/data_email", function(req,res)
  queries = req.query;
  if(queries)
    axios.post(url_post,
      post_data, //get the data (email) from data_email.hbs
      post_config, 
      params: queries
    ).then(function (response)
      json_result_post = response['data'];
      content = json_result_post['body-json'];
      //console.log(content);
      data_table = JSON.stringify(content, null, 2);
      res.render("data_email", data:data_table);
    ).catch(function (error)
      console.log(error);
    );
  
  else 
    console.log("???");
  
); 

【问题讨论】:

【参考方案1】:

您的html 中应该有formsubmit 按钮。

<div class="container">
  <form action="/data_email" method="POST">
    <input type="text" id="email" value="">
    <input type="submit" value="Submit">
  </form>
</div>

您的服务器应该监听POST 方法而不是GET。您还需要body-parser 来解析传入的x-www-form-urlencoded 请求正文。然后可以通过req.body

获得表单输入
const bodyparser = require('body-parser')

app.use(bodyParser.urlencoded( extended: false ));

app.post("/data_email", function(req,res) 
  console.log(req.body)
  // contains input, example req.body.email

更新:

您可以拥有具有相同 api 名称但不同 http methods 的端点。因此,您可以执行以下操作来提供表单

app.get("/data_email", function(req,res)
  res.render("data_email", data:data_table);

【讨论】:

评论不用于扩展讨论;这个对话是moved to chat。 @naga-elixir-jar,感谢您的评论!现在可以使用了

以上是关于如何将数据从 hbs (html) 传递到 axios 发布请求?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用把手 (hbs) 迭代嵌套数组和对象?

尝试将 mongo 数据存储在变量中并将其与 hbs 一起使用

如何将参数从脚本传递到 html 表单值

如何将 JSON 格式的数据从 WebView 传递到 HTML 页面

如何将数据从 vue 组件传递到 laravel 中的视图(HTML)

如何将信息从 node.js 传递到 html