2016-02-12 318 views
0

我遇到了一个我认为可能的问题。使用Express.js在服务器上发送POST请求

我想要两条快线,一条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请求实际发送用户到页面。

+0

但是......为什么? – adeneo

+0

@adeneo我有一个来自第三方的请求,正在打我的服务器。我希望能够嘲笑我的服务器上的POST请求。 – ThomasReggi

+0

请参阅http://stackoverflow.com/questions/46582/response-redirect-with-post-instead-of-get和https://en.wikipedia.org/wiki/Post/Redirect/Get。我的理解是,客户端只能发出请求方法,例如'GET /index.php HTTP/1.1;主机:www.example.org',并且来自服务器的重定向头在客户端之后使用相同的方法,例如, 'HTTP/1.1 301永久移动;位置:http://www.example.org/index.asp。从您的评论中,这听起来像你想作为代理,在这种情况下*你*将执行POST,然后将响应发送给客户端。 –

回答

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)) 
0

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

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

0

您可以使用request-promise将数据发布到url。所以,启动这个功能,你可以得到的数据在API网址

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... 
     }); 

道歉如果我把你的问题错了。