通过nodejs和express重定向到自定义URL

时间:2016-09-27 09:03:45

标签: javascript node.js express

我遇到重定向问题。我有一个小的 nodejs / express 应用,在提交表单后应该使用表单的输入值重定向到外部网址。

的index.html

<form method="POST" action="https://192.0.2.1/abc.html">
    <input name="name"/>
    <input name="email"/>
    <button type="submit">
</form>

只有https://192.0.2.1/abc.html没有输入才能进入&#39;值。请帮忙。

1 个答案:

答案 0 :(得分:1)

实施例

我写了一个你正在描述的实例:

'use strict';
var host = '127.0.0.1', port = 3333;
var express = require('express');
var bodyParser = require('body-parser');
var app = express();
app.use(bodyParser.urlencoded({extended: true}));
app.get('/', (req, res) => {
  res.type('html').end(`
    <form method="POST" action="http://${host}:${port}/abc.html">
    <input name="name"/>
    <input name="email"/>
    <button type="submit">Submit</button>
    </form>
    <form method="POST" action="http://${host}:${port}/def.html">
    <input name="name"/>
    <input name="email"/>
    <button type="submit">Submit</button>
    </form>
  `);
});
app.post('/abc.html', (req, res) => {
  var name = req.body.name, email = req.body.email;
  res.redirect(`http://${host}:${port}/ghi.html?name=${name}&email=${email}`);
});
app.post('/def.html', (req, res) => {
  res.type('html').end(`
    <p>Name: ${req.body.name}</p>
    <p>Email: ${req.body.email}</p>
  `);
});
app.get('/ghi.html', (req, res) => {
  res.type('html').end(`
    <p>Name: ${req.query.name}</p>
    <p>Email: ${req.query.email}</p>
  `);
});
app.listen(port, () =>
  console.log(`Listening on http://${host}:${port}/`));

运行

您需要安装expressbody-parser

npm install express body-parser

运行:

node app.js

两种形式

第一个表单通过POST方法正确传递参数。 POST /abc.html处理程序可以访问它们并将重定向发送到表单的自定义URL:/ghi.html?name=xxx&email=yyy - 重定向的目标以HTML格式显示这些值,您也可以在地址栏中看到它们

第二种形式不会重定向,但会直接显示参数,以便您可以更好地了解正在进行的操作。在浏览器中打开Developer Console并在单击表单按钮时观察网络活动也很有用。

说明

从您的示例中不完全清楚您的代码中可能出现的错误,但我希望向您展示一个有效的示例代码,以帮助您诊断实施中的问题。

您必须记住的是,对于在查询字符串中传递参数的GET请求,您可以将其作为:

进行访问
req.query.name
req.query.email

对于在请求正文中传递参数的POST请求,您必须使用body-parser中间件,然后您可以使用以下命令访问它们:

req.body.name
req.body.email

请求概述

此处发出的请求是:

  1. 您可以访问http://127.0.0.1:3333/并获取包含两种表单的HTML
  2. 您输入电子邮件aaa作为姓名,bbb发送电子邮件并提交第一份表单
  3. 您的浏览器会向/abc.html发送POST请求,并且正文中包含name=aaa&email=bbb
  4. 服务器使用302 Found标题
  5. 发送Location: http://127.0.0.1:3333/ghi.html?name=aaa&email=bbb响应
  6. 您的浏览器向:/ghi.html?name=aaa&email=bbb
  7. 发送GET请求
  8. 服务器使用包含参数
  9. 的HTML发送200 OK响应