【问题标题】:Take HTML form and pass values to variables in node.js function采用 HTML 表单并将值传递给 node.js 函数中的变量
【发布时间】:2017-08-09 21:57:34
【问题描述】:

问题陈述:我有一个简单的 HTML 表单,它要求用户输入三个数字。当他们点击提交时,我会将表单传递给 node.js 文件并将每个值分配给一个变量。

下面是我的 HTML 文件:

<body>
<form action="/" method="post">
<fieldset>
First number: <input type="number" name="param1"><br>
Second number: <input type="number" name="param2"><br>
Third number: <input type="number" name="param3"><br>
<input type="submit" value="submit" />
</fieldset>
</form>
</body>

这是我对 node.js 文件的一点点:

var http = require('http');
var math = require('mathjs');

    var m = 3;
    var n = 5;
    var o = 7;
    var p = 2;

http.createServer(function(req,res) {

function pleaseSolve () {

    var comp = math.chain(m)
    .add(m)
    .divide(p)
    .multiply(o)
    .done();

res.writeHead(200, {'Content-Type': 'text/html'});
res.end("The answer is " + comp);

}

pleaseSolve();

}).listen(8080);

相反,我想要一种方法或类似的东西,它可以使用来自 HTML 表单的输入来分配这些变量,而不是简单地对它们进行硬编码。

编辑:我已经被否决了,我已经在网上搜索了两天的答案,但我还没有找到答案。请保持建设性,至少链接另一个帖子而不是反对投票和非建设性的。

【问题讨论】:

  • 真的吗?我以前见过这个问题,但现在有很多答案已被弃用。此外,他们似乎都没有明确说明如何将 HTML 中的特定值分配给节点文件中的特定变量。
  • 解析 POST 变量时,输入字段的名称是包含数据的属性的名称,如该链接上的示例所示。例如,request.body.foo 包含名为“foo”的输入的值。并且接受的答案显示了执行此操作的较旧和较新的方法(取决于您使用的是快速版本 3.x 还是 4.x)。

标签: javascript html node.js express


【解决方案1】:

以下 Node.js 代码将解决您的问题。 您需要一个路由来返回您的主 html 文件,以及一个获取发布数据并根据此数据返回结果的路由。

var express = require('express')
var http = require('http');
var math = require('mathjs');
var bodyParser = require('body-parser');

var app = express()

// use body parser to easy fetch post body
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json())

// route to '/' to return the html file
app.get('/', function (req, res, next) {
  res.sendfile('index.html');
});

//route that receives the post body and returns your computation
app.post('/solve', function (req, res, next) {
  pleaseSolve(req.body, res);
});

app.listen(8080);

function pleaseSolve(parms, res) {
  //get the parameters based on input name attribute from the html
  //and parse strings to numbers
  var m = +parms.param1;
  var o = +parms.param2;
  var p = +parms.param3;

  var comp = math.chain(m)
    .add(m)
    .divide(p)
    .multiply(o)
    .done();

  res.writeHead(200, { 'Content-Type': 'text/html' });
  res.end("The answer is " + comp);
}

【讨论】:

  • 首先,非常感谢您迄今为止的帮助。我已经按照您的示例进行操作,但是当我启动节点服务器并提交用户输入时,下一页显示“无法发布 /this_folder_calc.js”。你知道可能是什么问题吗? app.post 是否应该指向特定的 html 文件?现在地雷只说“app.post('/', function(req,res,next)...
  • 让我们看看,我对 node.js 或其表达的东西完全了解 zero,但在我看来 app.post('/solve' ... ) 暗示它正在侦听路径上的 POST /solve 所以 index.html 中的 &lt;form&gt; 应该使用 method="POST"action="/solve"
  • @Stephen 是正确的!这是 html 中的
    行:
猜你喜欢
  • 2020-06-05
  • 1970-01-01
  • 2015-06-07
  • 1970-01-01
  • 2018-10-27
  • 1970-01-01
  • 2019-09-13
  • 2016-04-05
  • 1970-01-01
相关资源
最近更新 更多