繁体   English   中英

node.js:如何在服务器端区分两种形式?

[英]node.js: How to differentiate between two forms on server side?

我的html页面上有两种形式:

<form id="enterForm" action="/" enctype="multipart/form-data" method="post">
    <fieldset>
        <textarea id="queries" name="queries"></textarea><br />
        <input type="submit" value="submit" />
    </fieldset>
</form>
<form id="uploadForm" action="/upload" enctype="multipart/form-data" method="post">
    <fieldset>
        <input type="file" name="upload"><br />
        <input type="submit" value="Upload">
    </fieldset>
</form>

在服务器端,我必须根据按下表单的提交按钮来调用相应的函数。

目前,我正在这样做:

var server = http.createServer(function (req, res) {
    if (req.url == '/upload' && req.method.toLowerCase() == 'post') {
        processFile(req, res);
    }
    else if (req.method.toLowerCase() == 'post') {
        processField(req, res);
    }
}

我的问题是,服务器是否还有其他方法可以找出按下了哪个表单的“提交”按钮? 理想情况下,我希望两种形式的网址都相同。

您可能在每个表单上都有一个隐藏的表单字段。

<form id="enterForm" action="/" enctype="multipart/form-data" method="post">
<fieldset>
    <textarea id="queries" name="queries"></textarea><br />
    <input type="hidden" name="formInstance" value="form1" />
    <input type="submit" value="submit" />
</fieldset>
</form>
<form id="uploadForm" action="/" enctype="multipart/form-data" method="post">
<fieldset>
    <input type="file" name="upload"><br />
    <input type="hidden" name="formInstance" value="form2" />
    <input type="submit" value="Upload">
</fieldset>
</form>

然后在服务器上,您可以解析请求正文以查看为formInstance分配了什么值。 但是,如果您不使用模块来帮助解析正文,则需要大量的代码行。 因此,您可能想要使用类似node-formidable的模块。 然后,您可以执行以下操作。

var server = http.createServer(function (req, res) {
    if (req.url == '/' && req.method.toLowerCase() == 'post') {
        var form = new formidable.IncomingForm();
        form.parse(req, function(err, fields, files) {
            if(fields.formInstance == 'form1') {
                processField(req, res); 
            }
            else if(fields.formInstance == 'form2') {
                processFile(req, res);
            }
        }
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM