Node.js的 - 如何从HTML发送数据来表达(Node.js - How to send da

2019-07-22 15:43发布

这是在HTML形式例如:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>CSS3 Contact Form</title>
</head>
<body>
<div id="contact">
    <h1>Send an email</h1>
    <form action="/myaction" method="post">
        <fieldset>
            <label for="name">Name:</label>
            <input type="text" id="name" name="name" placeholder="Enter your full name" />

            <label for="email">Email:</label>
            <input type="email" id="email" placeholder="Enter your email address" />

            <label for="message">Message:</label>
            <textarea id="message" placeholder="What's on your mind?"></textarea>

            <input type="submit" value="Send message" />

        </fieldset>
    </form>
</div>
</body>
</html>

这是在服务器上运行的node.js功能:

var sys = require('sys'),
    http = require('http');
    http.createServer(function (req, res) {
            switch (req.url) 
                case '/myaction':
                        res.end(?????);
                    break;
            }
    }).listen(8080);
sys.puts('Server running at http://127.0.0.1:8080/');

我有2个问题:

  1. 我怎么能叫myaction从HTML页面Node.js的功能? 因为HTML文件运行在端口80和Node.js的8080(当我尝试移动到80端口写入“//未处理的‘错误’事件” Node.js的)
  2. 在Node.js的功能,我把“?????” 我怎样才能从HTML表单数据。 当我输入req.html.body.name我没有得到的数据...

Answer 1:

使用http.createServer是非常低的水平,真的不用于创建Web应用程序为,是非常有用的。

一个良好的框架,在上面用的是快递,我会认真地建议使用它。 您可以通过安装它npm install express

当你有,你可以创建一个基本的应用程序来处理你的表格:

var express = require('express');
var bodyParser = require('body-parser');
var app     = express();

//Note that in version 4 of express, express.bodyParser() was
//deprecated in favor of a separate 'body-parser' module.
app.use(bodyParser.urlencoded({ extended: true })); 

//app.use(express.bodyParser());

app.post('/myaction', function(req, res) {
  res.send('You sent the name "' + req.body.name + '".');
});

app.listen(8080, function() {
  console.log('Server running at http://127.0.0.1:8080/');
});

你可以让你的形状点用它来:

<form action="http://127.0.0.1:8080/myaction" method="post">

你不能在80端口上运行节点的原因是因为已经有在该端口上运行的进程(这是你的服务index.html )。 你可以使用快递还提供静态内容,喜欢index.html ,使用express.static中间件。



Answer 2:

我想在Obertklep的答案扩大。 在他的例子是一个NPM模块调用body-parser这是做的大部分工作。 当他把req.body.name ,我相信他/她是用body-parser来获取表单提交时的name属性(S)的内容接收。

如果你不希望使用快递,使用querystring这是一个内置的节点模块。 请参阅下面的链接的答案为如何用一个例子querystring

这可能有助于看看这个答案 ,这是非常相似,你的追求。



文章来源: Node.js - How to send data from html to express