我会告诉你我的问题,一段时间前,我开始了一个项目,使用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方法是否必须指定一些配置到服务器,而不是我在代码中设置的配置。
1条答案
按热度按时间a5g8bdjr1#
你不能在http中发送两次响应
因此,当您要发送第二次时,请检查第一次响应是否已发送,如果没有,您可以发送第二次响应
检查这个
字符串
P.S:它不是两个目的地,因为Response对象是一个