Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 通过nodejs和express重定向到自定义url_Javascript_Node.js_Express - Fatal编程技术网

Javascript 通过nodejs和express重定向到自定义url

Javascript 通过nodejs和express重定向到自定义url,javascript,node.js,express,Javascript,Node.js,Express,我对重定向有问题。我有一个小的nodejs/express应用程序,在提交表单后,它应该用表单的输入值重定向到外部URL index.html 它只会转到https://192.0.2.1/abc.html无输入值。请帮忙。示例 我写了一个你正在描述的工作示例: 'use strict'; var host = '127.0.0.1', port = 3333; var express = require('express'); var bodyParser = require('body-

我对重定向有问题。我有一个小的nodejs/express应用程序,在提交表单后,它应该用表单的输入值重定向到外部URL

index.html


它只会转到
https://192.0.2.1/abc.html
无输入值。请帮忙。

示例 我写了一个你正在描述的工作示例:

'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}/`));
并与以下内容一起运行:

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

第二个表单没有重定向,而是直接显示参数,这样您就可以更好地看到发生了什么。在浏览器中打开开发者控制台并在单击表单按钮时观察网络活动也很有用

解释 您的示例并不完全清楚代码中可能存在的错误,但我希望向您展示一个有效的示例代码将帮助您诊断实现中的问题

您必须记住的是,对于在查询字符串中传递参数的GET请求,您可以通过以下方式访问它们:

req.query.name
req.query.email
对于在请求正文中传递参数的POST请求,您必须使用
body parser
中间件,然后可以通过以下方式访问它们:

req.body.name
req.body.email
请求概述 在这里提出的要求是:

  • 您可以通过两个表单访问和获取HTML
  • 您输入email
    aaa
    作为姓名,输入email
    bbb
    作为电子邮件,并提交第一份表格
  • 您的浏览器向
    /abc.html
    发送一个POST请求,正文中包含
    name=aaa&email=bbb
  • 服务器发送带有
    位置的
    302 Found
    响应:http://127.0.0.1:3333/ghi.html?name=aaa&email=bbb
    标题
  • 您的浏览器将GET请求发送到:
    /ghi.html?name=aaa&email=bbb
  • 服务器用包含参数的HTML发送
    200OK
    响应

  • 你能提供一些进一步的细节吗?192.0.2.1是nodejs服务器吗?index.html托管在哪里?您是否编写了一个应该接收表单输入值的函数?您在HTML文件中使用什么机制来输出结果?您是否在寻找
    method=“get”
    而不是
    post
    ?最好的办法是查看:
    http://expressjs.com/en/api.html#res.locals
    @AaronUllal@Tom@str@VladNeacsu我想我在编程方面还完全是个呆子,但我的解释是:)我有一个带有express的nodeJS应用程序。设备路由器f.e.将用户重定向到我的应用程序。用户应在按下提交后输入其凭据,然后应用程序必须将其输入传递到
    https://192.0.2.1/abc.html
    ,这是路由器的页面,不包括用户输入,并向他显示信息是否正确。所以我的应用程序只能通过POST将用户的输入重定向回来request@AleksMaksiuta听说这对你有帮助真是太好了。你可以考虑让其他人看到这个问题在回答这个问题时有一个被接受的答案。
    req.query.name
    req.query.email
    
    req.body.name
    req.body.email