我有一个节点应用程序,它发送一个API请求来触发Manifold(一个假的投注网站)上的投注。
当我使用node-fetch时,它会进行打赌。当我使用内置的fetch时,如果有旧版本的bet,它会返回旧版本的bet(可能缓存了以前的HTTP响应?)。重新启动节点服务器并不能解决此问题-它似乎仍然返回旧的响应。
除了注解或取消注解node-fetch的导入(第3行)之外,没有其他更改。
如果我在postman中运行相同的请求,它就会下注。
API/placebet/routes中的代码。ts
import { NextResponse } from 'next/server';
import fetch from 'node-fetch';
export async function POST(request: Request) {
const body = await request.json();
const sendTime = Date.now();
console.log('placeBet called with body:', body.apiKey, body.betAmount, body.outcomeToBuy, body.marketID);
const res = await fetch('https://manifold.markets/api/v0/bet', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': `Key ${body.apiKey}`,
},
body: JSON.stringify({
amount: body.betAmount,
outcome: body.outcomeToBuy,
contractId: body.marketID,
}),
});
if (!res.ok) {
const errorDetails = await res.json();
console.error(errorDetails);
return NextResponse.json({error: "Error placing the bet"}, {status: 500 });
}
const data = await res.json();
// Check if the bet's timestamp is before sendTime
const betTimestamp = data.fills[0].timestamp;
if (betTimestamp < sendTime) {
console.error('Error: Bet timestamp is before sendTime');
console.log(data);
return NextResponse.json({error: "Bet timestamp is before sendTime"}, {status: 500 });
}
console.log("Bet response", data)
return NextResponse.json(data)
}
1条答案
按热度按时间lfapxunr1#
这是因为内置的
fetch
函数缓存了HTTP响应。您可以尝试在请求头中使用
'cache-control': 'no-cache'
,这将确保您的响应不会被缓存,并且每次发出请求时都会生成一个新的响应。你的
POST
方法看起来像这样: