我正在用NodeJS和Koa编写一个服务器,该服务器将每个请求转发到带有HEAD请求的另一个服务器,如果响应正常,它将继续处理该请求。 执行此操作的中间件如下所示:
//basicAuth.js
import axios from 'axios'
export default async function(ctx,next) {
console.log(ctx.headers)
let result = await axios({
url: process.env.USER_SERVICE_LOGIN_PATH,
baseURL: process.env.USER_SERVICE_BASE_URL,
method: 'HEAD',
headers: ctx.headers,
timeout: 5000
})
await next()
}
我的服务器将其用作中间件:
app.use(basicAuth)
其他服务检查标头并以200或401响应。
每当我收到对服务器的GET请求,此方法就可以正常工作。但是,当我收到POST请求时,我在axios呼叫中联系的另一台服务器抛出ERCONNRESET错误,并且连接超时。看看我的这条路线的代码和其他一些代码:
router.get('/', async ctx => {
ctx.set('Allow','GET, POST')
try {
if (ctx.get('error')) throw new Error(ctx.get('error'))
let res = await db.getCourses({...ctx.query})
ctx.status = status.OK
ctx.body = res
}
catch(err) {
ctx.status = status.BAD_REQUEST
ctx.body = {status: status.BAD_REQUEST, message: err.message}
}
})
router.post('/create', async ctx => {
ctx.set('Allow','POST')
try {
if (ctx.get('error')) throw new Error(ctx.get('error'))
let res = await db.postCourse({data: ctx.request.body})
ctx.status = status.OK
ctx.body = res
}
catch(err) {
ctx.status = status.BAD_REQUEST
ctx.body = {status: status.BAD_REQUEST, message: err.message}
}
})
这是一个非常奇怪的行为,我唯一能猜测为什么会发生这种情况是因为某种标头或某些东西破坏了请求。由于请求POST / create,我记录了axios调用中传递的标头。
{ 'content-type': 'application/json',
'cache-control': 'no-cache',
'postman-token': '561fca27-f23a-4ae8-ba05-5fbeef0f0d20',
'user-agent': 'PostmanRuntime/7.4.0',
accept: '*/*',
host: 'localhost:3031',
'accept-encoding': 'gzip, deflate',
'content-length': '122',
connection: 'keep-alive' }
任何想法为什么我访问POST / create时都无法通过axios呼叫。我从另一台服务器获得的唯一输出是ERRCONRESET,我用console.logs测试了我尝试访问的路由。