ReactJs 前端调用 NestJs 后端空响应
ReactJs frontend calling NestJs backend empty response
我有一个 ReactJs 前端(本地主机),我从中调用 NestJs 后端:
fetch("http://myappherokuapp.com/user/login", {
method: "POST",
mode: 'no-cors',
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
'Accept': 'application/json'
},
body: encodedToken
})
.then(res => res.json())
.then(
(result) => {
console.log(result);
},
(error) => {
//TODO
}
);
这是 NestJs 后端控制器:
@Controller('user')
//init...
@Post('login')
async login(@Res() res, @Body() userLoginDto: UserLoginDto) {
return res.status(HttpStatus.OK).json({
logged: 'true'
});
}
在浏览器开发者控制台中,检查响应“加载响应数据失败”,在 res.json() 的资源中我发现了这个:
response
如果我从 PostMan 调用 /login,我会收到正确的 200 响应:
{
“记录”:“真实”
}
会不会是cors的问题?关于内容类型?
你有什么想法吗?
谢谢
首先,您可以简化该端点的代码,只需在端点上附加装饰器 HttpCode(HttpStatus.OK) 和 return 您想要的数据
@Post('login')
@HttpCode(HttpStatus.OK) // Or @HttpCode(200)
async login(@Body() userLoginDto: UserLoginDto) {
return { logged: 'true' };
}
要检查问题是否由 cors 引起,请在您的 main.ts
中添加此行
app.enableCors({
origin: '*',
allowedHeaders:
'Content-Type, Access-Control-Allow-Headers, Authorization',
});
然后 运行 你的代码,你还必须在该承诺上添加一个 catch 表达式来处理错误。如果请求成功,请记住将 origin: '*' 更改为您的白名单来源,因为通过该行,您可以从任何地方访问您的后端,并且您将只接受那些 headers.
我有一个 ReactJs 前端(本地主机),我从中调用 NestJs 后端:
fetch("http://myappherokuapp.com/user/login", {
method: "POST",
mode: 'no-cors',
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
'Accept': 'application/json'
},
body: encodedToken
})
.then(res => res.json())
.then(
(result) => {
console.log(result);
},
(error) => {
//TODO
}
);
这是 NestJs 后端控制器:
@Controller('user')
//init...
@Post('login')
async login(@Res() res, @Body() userLoginDto: UserLoginDto) {
return res.status(HttpStatus.OK).json({
logged: 'true'
});
}
在浏览器开发者控制台中,检查响应“加载响应数据失败”,在 res.json() 的资源中我发现了这个:
response
如果我从 PostMan 调用 /login,我会收到正确的 200 响应:
{ “记录”:“真实” }
会不会是cors的问题?关于内容类型?
你有什么想法吗?
谢谢
首先,您可以简化该端点的代码,只需在端点上附加装饰器 HttpCode(HttpStatus.OK) 和 return 您想要的数据
@Post('login')
@HttpCode(HttpStatus.OK) // Or @HttpCode(200)
async login(@Body() userLoginDto: UserLoginDto) {
return { logged: 'true' };
}
要检查问题是否由 cors 引起,请在您的 main.ts
中添加此行app.enableCors({
origin: '*',
allowedHeaders:
'Content-Type, Access-Control-Allow-Headers, Authorization',
});
然后 运行 你的代码,你还必须在该承诺上添加一个 catch 表达式来处理错误。如果请求成功,请记住将 origin: '*' 更改为您的白名单来源,因为通过该行,您可以从任何地方访问您的后端,并且您将只接受那些 headers.