Javascript 使用Express.js在服务器上发送POST请求

Javascript 使用Express.js在服务器上发送POST请求,javascript,node.js,express,Javascript,Node.js,Express,我遇到了一个我认为可能的小问题 我想要两条快车路线,一条GETroute/post data和一条postroute/post receive 代码如下所示: app.get('/post-data', (req, res, next) => { //set url to '/post-recieve' and set body / headers }) app.post('/post-recieve', (req, res, next) => { return re

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

我想要两条快车路线,一条
GET
route
/post data
和一条
post
route
/post receive

代码如下所示:

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 receive
,除非您在开发人员控制台中查看,您应该看到文档的方法是
post
,而不是正常的
GET
请求

这可能吗


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

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


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

这感觉很愚蠢,但这可能是唯一的方法

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))
函数postProxyMiddleware(url,数据){
返回(请求、恢复、下一步)=>{
设str=[]
str.push(``)
每个(数据,(值,键)=>{
str.push(``)
})
str.push(``)
str.push(``)
str.push(`document.getElementById(“theForm”).submit()`)
str.push(``)
返回res.send(str.join(“”))
}
}
app.get('/mock',postProxyMiddleware('/page',exampleHeaders))

您可以使用请求承诺将数据发布到url。因此,使用此函数启动,您可以在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...
        });

如果我误解了你的问题,我向你道歉

@adeneo我收到第三方的请求,正在攻击我的服务器。我希望能够在我的服务器上模拟该POST请求。请参阅和。据我所知,客户端只能发出请求方法,例如
GET/index.php HTTP/1.1;主机:www.example.org
,客户端使用相同的方法跟随来自服务器的重定向头,例如HTTP/1.1 301永久移动;地点:http://www.example.org/index.asp。从您的评论中,听起来您想充当代理,在这种情况下,您将执行POST,然后将响应发送给客户端。有趣的问题,顺便说一句!关于更改请求方法,s.o上还有很多其他问题,因此您可以在此处进行更多搜索以获取更多信息。