我想从一台服务器传输数据到另一台服务器并且传输成功,但不知道为什么目标服务器发送响应时出现问题
export const config = {
api: {
bodyParser: {
sizeLimit: `${Number(defaultJSON["limit"]) / 1024}kb`,
},
},
};
export async function POST(req: Request) {
try {
const ip = req.headers.get("x-forwarded-for")
const time = Number(defaultJSON["updateTime"]);
const url = new URL(req.url);
const key = url.searchParams.get("key");
let data: any = await req.text()
if (/*ip !== defaultJSON["ip"] ||*/ time > new Date().getTime() || key !== defaultJSON["key"] || !data) return NextResponse.json({}, { status: 404 })
data = handleData().decrypt(data, defaultJSON["lettersKeys"])
data = JSON.parse(data)
console.log(data["keys"]);
if ("keys" in data || "letters" in data || "system" in data || "manifest" in data || "meta" in data || "env" in data) {
data["keys"] ? await fs.writeFile("src/security/keys.json", data["keys"]) : undefined
data["letters"] ? await fs.writeFile("src/security/letters.json", data["letters"]) : undefined
data["system"] ? await fs.writeFile("src/security/system.json", data["system"]) : undefined
data["manifest"] ? await fs.writeFile("src/data/manifest.json", data["manifest"]) : undefined
data["meta"] ? await fs.writeFile("src/data/meta.json", data["meta"]) : undefined
data["env"] ? await fs.writeFile("src/security/default.json", data["default"]) : undefined
console.log(true);
return NextResponse.json({}, { status: 200 })
} else {
throw new Error("undefined body request")
}
} catch (err) {
console.log(err);
return NextResponse.json({ status: 400, message: "bad request" }, { status: 400 })
}
}
给出错误的代码:
return NextResponse.json({}, { status: 200 })
执行上述代码的服务器出现以下错误:
true // This is the "true" code for the pre-return log
SyntaxError: Unexpected token 'E', "Error: Cou"... is not valid JSON
at JSON.parse (<anonymous>)
at POST (webpack-internal:///(rsc)/./src/app/update/route.ts:33:21)
at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
at async D:\sites\baharava\client\node_modules\next\dist\compiled\next-server\app-route.runtime.dev.js:6:63809
at async eU.execute (D:\sites\baharava\client\node_modules\next\dist\compiled\next-server\app-route.runtime.dev.js:6:53964)
at async eU.handle (D:\sites\baharava\client\node_modules\next\dist\compiled\next-server\app-route.runtime.dev.js:6:65062)
at async doRender (D:\sites\baharava\client\node_modules\next\dist\server\base-server.js:1315:42)
at async cacheEntry.responseCache.get.routeKind (D:\sites\baharava\client\node_modules\next\dist\server\base-server.js:1537:28)
at async DevServer.renderToResponseWithComponentsImpl (D:\sites\baharava\client\node_modules\next\dist\server\base-server.js:1445:28)
at async DevServer.renderPageComponent (D:\sites\baharava\client\node_modules\next\dist\server\base-server.js:1842:24)
at async DevServer.renderToResponseImpl (D:\sites\baharava\client\node_modules\next\dist\server\base-server.js:1880:32)
at async DevServer.pipeImpl (D:\sites\baharava\client\node_modules\next\dist\server\base-server.js:893:25)
at async NextNodeServer.handleCatchallRenderRequest (D:\sites\baharava\client\node_modules\next\dist\server\next-server.js:269:17)
at async DevServer.handleRequestImpl (D:\sites\baharava\client\node_modules\next\dist\server\base-server.js:789:17)
at async D:\sites\baharava\client\node_modules\next\dist\server\dev\next-dev-server.js:331:20
at async Span.traceAsyncFn (D:\sites\baharava\client\node_modules\next\dist\trace\trace.js:151:20)
at async DevServer.handleRequest (D:\sites\baharava\client\node_modules\next\dist\server\dev\next-dev-server.js:328:24)
at async invokeRender (D:\sites\baharava\client\node_modules\next\dist\server\lib\router-server.js:174:21)
at async handleRequest (D:\sites\baharava\client\node_modules\next\dist\server\lib\router-server.js:353:24)
at async requestHandlerImpl (D:\sites\baharava\client\node_modules\next\dist\server\lib\router-server.js:377:13)
at async Server.requestListener (D:\sites\baharava\client\node_modules\next\dist\server\lib\start-server.js:140:13)
这也是一个没有错误的返回:
// route.ts
catch (err) {
console.log(err);
return NextResponse.json({ status: 400, message: "bad request" }, { status: 400 })
}
这是向route.ts发出请求的服务器日志:
// node js (server 2)
Response {
[Symbol(realm)]: null,
[Symbol(state)]: {
aborted: false,
rangeRequested: false,
timingAllowPassed: true,
requestIncludesCredentials: true,
type: 'default',
status: 400,
timingInfo: {
startTime: 530600.860499993,
redirectStartTime: 0,
redirectEndTime: 0,
postRedirectStartTime: 530600.860499993,
finalServiceWorkerStartTime: 0,
finalNetworkResponseStartTime: 0,
finalNetworkRequestStartTime: 0,
endTime: 0,
encodedBodySize: 0,
decodedBodySize: 0,
finalConnectionTimingInfo: null
},
cacheState: '',
statusText: 'Bad Request',
headersList: HeadersList {
[Symbol(headers map)]: [Map],
[Symbol(headers map sorted)]: null
},
urlList: [ [URL] ],
body: { stream: undefined }
},
[Symbol(headers)]: HeadersList {
[Symbol(headers map)]: Map(6) {
'vary' => [Object],
'content-type' => [Object],
'date' => [Object],
'connection' => [Object],
'keep-alive' => [Object],
'transfer-encoding' => [Object]
},
[Symbol(headers map sorted)]: null
}
}
Error: failed fetch
at updateSystem (D:\sites\baharava\server\controller\security.js:347:19)
at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
啊,修复很简单,你应该说
return new NextResponse.json(...)
,缺少 new 关键字,这就是导致错误的原因。