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);
}
}
我的问题是,服务器是否有其他方法可以找出按下了哪个表单的提交按钮?理想情况下,我希望两种形式的 url 保持相同。
您可以在每个表单上有一个隐藏的表单域。
<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);
}
}
}
}
我的 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);
}
}
我的问题是,服务器是否有其他方法可以找出按下了哪个表单的提交按钮?理想情况下,我希望两种形式的 url 保持相同。
您可以在每个表单上有一个隐藏的表单域。
<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);
}
}
}
}