使用Express.js

时间:2016-02-12 01:48:44

标签: javascript node.js express

我遇到了一个我认为可行的小问题。

我希望有两条快速路线,一条GET路线/post-data和一条POST路线/post-recieve

代码看起来像这样:

app.get('/post-data', (req, res, next) => { 
  //set url to '/post-recieve' and set body / headers
})  

app.post('/post-recieve', (req, res, next) => {
  return res.json(res.body)
})

现在,当您访问/post-data时,您应该立即重定向到/post-recieve,除非您查看开发人员控制台,您应该看到该文档的方法是POST而不是正常GET请求。

这可能吗?

我知道您可以使用像request之类的库向端点发出HTTP post请求,但我正在谈论实际上是通过POST请求将用户发送到页面。

3 个答案:

答案 0 :(得分:0)

以编程方式将客户端的请求方法从GET更改为POST的唯一方法是创建一个包含method="post"action="/post-receive"隐藏元素的表单,然后使用客户端JavaScript自动提交表单。

响应GET请求的任何HTTP重定向也将是GET。

答案 1 :(得分:0)

这感觉非常愚蠢,但这可能是唯一的方法???

function postProxyMiddleware (url, data) {
  return (req, res, next) => {
    let str = []
    str.push(`<form id="theForm" action="${url}" method="POST">`)
    each(data, (value, key) => {
      str.push(`<input type="text" name="${key}" value="${value}">`)
    })
    str.push(`</form>`)
    str.push(`<script>`)
    str.push(`document.getElementById("theForm").submit()`)
    str.push(`</script>`)
    return res.send(str.join(''))
  }
}

app.get('/mock', postProxyMiddleware('/page', exampleHeaders))

答案 2 :(得分:0)

您可以使用请求承诺将数据发布到网址。因此,使用此功能启动,您可以在api url中获取数据

const request = require('request');
const rp = require('request-promise');

let req = {
        "param1" : "data1",
        "param1" : "data2"       
    }    
    rp({
        method: 'POST',
        uri: 'http://localhost:3000/post-data/',
        body: req,
        json: true // Automatically stringifies the body to JSON
        }).then(function (parsedBody) {
                console.dir(parsedBody);
                return parsedBody;
                // POST succeeded...
            })
            .catch(function (err) {
                console.log(err+'failed to post data.');
                return err+'failed to post data.';
                // POST failed...
        });

道歉如果我的问题出错了。