Javascript 如何从axios获得重定向响应?

Javascript 如何从axios获得重定向响应?,javascript,node.js,reactjs,express,axios,Javascript,Node.js,Reactjs,Express,Axios,我认为请求没有问题,因为我使用了相同的请求发布新角色,并且成功了。 我认为问题在于的反应 使用Express和Node的后端 我有一个更新角色的API路由 router.put('/:id',(req,res,next)=>{ const{id}=req.params; 我保证([ 可更新性(id、req.body.Capabilities、next), updateCharacter(id,req.body.name,req.body.img,next), 更新显示(id,req.body.s

我认为请求没有问题,因为我使用了相同的请求发布新角色,并且成功了。 我认为问题在于的反应

使用Express和Node的后端 我有一个更新角色的API路由

router.put('/:id',(req,res,next)=>{
const{id}=req.params;
我保证([
可更新性(id、req.body.Capabilities、next),
updateCharacter(id,req.body.name,req.body.img,next),
更新显示(id,req.body.shows,下一步)
])
.then(values=>console.log(values,'是在put请求时接收的值'))
。然后(()=>res.redirect('/'+id))
.catch(err=>next(err));
})
当我使用邮递员发送请求时,我得到了完美的响应

使用Axios的React应用程序中的前端 我正在使用Axios在React应用程序上执行相同的请求

导出异步函数updateOne(输入,cid){
输入={
名称:“green latern 2”,
能力:“魔戒,超能力”,
表演:“正义联盟”,
img:“一个图像”,
};
cid=11;
设err=null
常数响应=等待axios({
方法:'放',
url:BASE_url+cid,
数据:投入
}).catch(e=>err=e);
log(响应“是响应”);
返回;
}
但在这样做时,我得到了一个错误:

Error: Network Error
    createError createError.js:16
    handleError xhr.js:83
    dispatchXhrRequest xhr.js:80
    xhrAdapter xhr.js:12
    dispatchRequest dispatchRequest.js:52
    promise callback*request Axios.js:61
    wrap bind.js:9
    updateOne apiCalls.js:36
    js apiCalls.js:66
    Webpack 22
 was the response apiCalls.js:42
代码可以在GitHub上找到:


如果您需要更多信息,我将提供您需要的信息。请对同样的内容发表评论

在邮递员中,您将数据作为
x-www-form-urlencoded
发送。Axios可能以JSON的形式发送数据,内容类型为
application/JSON
。您的express应用程序是否能够处理json请求?您需要使用bodyParser中间件:

通过npm:
npmi主体解析器

在您的应用程序中,您需要它,然后使用中间件:

constbodyparser=require('body-parser');
// ...
// ...
use(bodyParser.json());
编辑:正如评论中指出的,您还可以使用express.json()中间件,这是相同的

app.use(express.json())


…无需任何安装。

您的邮递员请求使用
x-www-form-urlencoded
您需要将
输入
对象转换为url编码字符串

同时将axios内容类型标题更改为
x-www-form-urlencoded
,因为默认情况下它是
application/json

headers: {
  "Content-Type": "application/x-www-form-urlencoded"
}
const输入={
名称:“green latern 2”,
能力:“魔戒,超能力”,
表演:“正义联盟”,
img:“一个图像”,
};
const urlencoded=Object.entries(inputs.map)([key,value])=>{
返回encodeURIComponent(键)+“=”+encodeURIComponent(值);
}).加入(“&”);
console.log(URL编码)在浏览了这个类似问题的几乎所有搜索结果后,我发现:

  • 来自重定向url(由后端本身重定向)的数据不能由任何库处理—无论是axios、fetch还是XMLHttpRequest本身
这不会发生,因为后端应用程序(在本例中为express)发送了
302
res.status.code
,它基本上告诉浏览器:“您要查找的数据在此url中找不到,但在我将您重定向到的url中”

此代码在任何库中都不起作用:

app.get(“/i/come/here”),函数(req,res){
return res.redirect(“/now/go/here”);//此处存储的实际数据
}
你甚至可能会得到一个CORS错误

  • 如果您试图重定向到url,则可能无法使用axios或fetch,除非您使用拦截器或其他类型的中间件或函数来处理句柄错误
是的,每当后端试图产生重定向时,axios总是会抛出错误

更多信息请点击此处:

  • (我发现)没有办法从url获取重定向的数据 当您尝试这样做时,axios将始终抛出错误。 最好的解决方案(我发现)是在后端应用程序本身中处理结果数据
对于本问题中处理的特定问题,我更改了后端路由,它更新了如下字符:

router.put('/:id',(req,res,next)=>{
const{id}=req.params;
我保证([
可更新性(id、req.body.Capabilities、next),
updateCharacter(id,req.body.name,req.body.img,next),
更新显示(id,req.body.shows,下一步)
])
.then(values=>console.log(values,'是在put请求时接收的值'))
.然后(()=>getOneById(id,res))
.catch(err=>next(err));
})
我使用了一个名为
getOneById(id,res)
的函数,该函数处理获取特定字符和发送json响应的逻辑

欢迎所有编辑和建议。如果我错了,请改正。
请在下面为相同的内容留下评论

你能在网络选项卡中检查api是否命中吗?
BASE\u URL
的值是多少?同样在邮递员中,你发送的是x-www-form-urlencoded,但在你的代码中它是一个aplain js对象。@Reyno
BASE\u URL
的值是
http://localhost:9000/
而且它工作正常xpress内置了
body解析器
,无需安装。只需使用
express.json()
我不认为这是body解析器的问题,因为我的post路由已经开始工作。此外,我已经使用了body解析器
const bodyParser=require('body-parser');const cors=require('cors');const routes=require('./routes');const app=express();app.use(cors());app.use(bodyParser.json());app.use(bodyParser.urlencoded({extended:true}));
我真的不认为这是一个p