postman 使用Nodejs的POST请求(发送到客户端js后无法设置头)

mrphzbgm  于 2023-08-05  发布在  Postman
关注(0)|答案(1)|浏览(162)

我会告诉你我的问题,一段时间前,我开始了一个项目,使用whatsapp API原则上它将只是一个机器人,但我决定扩展它,并使一个前端,除了有一个机器人一个人可以给予支持。
我一直想向代码所在的服务器(fly.io)发出POST请求,问题是当我发出GET请求时,它会毫无问题地返回结果,但使用POST时,同样的事情不会发生。
代码如下:

async function sendTextFront(textResponse, number){ 
    
        const data = JSON.stringify({
            "messaging_product": "whatsapp",    
            "recipient_type": "individual",
            "to": number,
            "type": "text",
            "text": {
                "preview_url": true,
                "body": textResponse
            }
        })
        whatsappService.SendMessageWhatsApp(data);
        await makeRequest(data);
        return Promise.resolve(data);
    };
    
    async function makeRequest(data) {
        let config = {
            method: 'post',
            maxBodyLength: Infinity,
            url: 'https://***.fly.dev/whatsapp/api/sendmessage',
            headers: { 
              'Content-Type': 'application/json', 
            },
            data : data
          };
        try {
            const response = await axios.request(config);
            console.log(JSON.stringify(response.data));
        }
        catch (e) {
            console.log(e);
        }
    }

字符串
这就是我如何配置使POST请求出现在我面前,然后在我设置的路由中:

.post(`/api/sendmessage`, (req, res) => {
        const dat = whatsappController.send(req, res)
        if (dat) {
            res.status(200).json({
                success: true,
                data: datos,
            });
        } else {
            res.status(500).json({
                success: false,
                error: "Error to send the message",
            });
            console.log(dat);
        }
    })


我应该澄清一下,索引文件的配置如下:

const appname = process.env.FLY_APP_NAME;
    
    const app = express();
    const PORT = process.env.PORT || 8080
    
    const HOST = "0.0.0.0";
    
    app.use(express.json());
    
    app.use("/whatsapp", apiRoute);
    
    app.listen(PORT, HOST, () => (console.log(`Server listen in port: ${PORT} and Host in: ${HOST}`)));
    console.log(`Back end in: https://${appname}.fly.dev/whatsapp/messages`);


当通过 Postman 发送一个帖子请求到url(https://----.fly.dev/whatsapp/api/sendmessage)时,消息到达WhatsApp没有问题,因为我使用了一个我已经建立的函数whatsappService.SendMessageWhatsApp(data);并且它使用API发送消息。
但是,如果我输入应该显示我的数据https://----.fly.dev/whatsapp/messages的URL,我什么也没有得到,我得到无法获取/whatsapp/API/sendmessage
这让我明白它正在等待一个get方法,正如你将在路由中看到的那样,我没有这样声明它。
我附上一张 Postman 给我看的图片(为了安全起见,这个例子的url被修改了):
x1c 0d1x的数据
我也给你们看我在浏览器里看到的



最后,当收到 Postman 的请求时,fly.io显示了这些错误

gru [info] node:internal/errors:491

 gru [info] ErrorCaptureStackTrace(err);

 gru [info] ^

 gru [info] Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client

 gru [info] at new NodeError (node:internal/errors:400:5)

 gru [info] at ServerResponse.setHeader (node:_http_outgoing:663:11)

 gru [info] at ServerResponse.header (/app/node_modules/express/lib/response.js:794:10)

 gru [info] at ServerResponse.send (/app/node_modules/express/lib/response.js:174:12)

 gru [info] at ServerResponse.json (/app/node_modules/express/lib/response.js:278:15)

 gru [info] at Object.send (/app/src/controllers/whatsappControllers.js:81:25)

 gru [info] at process.processTicksAndRejections (node:internal/process/task_queues:95:5) {

 gru [info] code: 'ERR_HTTP_HEADERS_SENT'

 gru [info] }

 gru [info] Node.js v18.13.0

 gru [info] INFO Main child exited normally with code: 1

 gru [info] INFO Starting clean up.

 gru [info] WARN hallpass exited, pid: 238, status: signal: 15 (SIGTERM)


我知道这可能是一个标题错误,我不能发送2后请求在同一时间到不同的目的地?如果有人有关于如何通过浏览器接收post请求和响应并给我带来数据的答案,我会很感激,我也不知道使用post方法是否必须指定一些配置到服务器,而不是我在代码中设置的配置。

a5g8bdjr

a5g8bdjr1#

你不能在http中发送两次响应
因此,当您要发送第二次时,请检查第一次响应是否已发送,如果没有,您可以发送第二次响应
检查这个

console.log(res.headersSent);

字符串
P.S:它不是两个目的地,因为Response对象是一个

相关问题