POST 请求中的服务器 returns 404
Server returns 404 in POST request
我有一个使用 React 和 Strapi headless CMS(使用 nodejs)构建的项目。使用 Strapi 处理的后端驻留在端口 443 中。当我使用 http://site:443 向后端中的任何 url 发送 GET 请求时,我得到一个有效的响应,但是 POST 请求总是returns 错误 404。
我使用外部工具 https://reqbin.com/ 对其进行了测试并得到了相同的结果。
有趣的是,即使我收到 404 响应,路由正在处理和执行,但仍返回 404 响应。
为什么会这样?
提前致谢
这是到达这条路线时的代码:
/**
* Create a/an orders record.
*
* @return {Object}
*/
create: async (ctx) => {
let params = ctx.request.body;
if (params.Sum) { // only if we got a good POST response
// check secret code
let a = params.UniqueID;
var res = a.substr(a.length - 12, a.length);
if (res !== 'secret') {
ctx.throw(500, 'SECURITY BLOCK', { expose: true });
return null;
}
var username = a.substr(0, a.length - 12);
// create validity
var date = new Date();
if (params.Sum === '250') { // one month membership
date.setTime( date.getTime() + 31 * 86400000 );
} else if (params.Sum === '390') { // one month membership
date.setTime( date.getTime() + 180 * 86400000 );
}
// create order in database
let today = new Date();
// extract username
var n = params.CustomerName.indexOf("_");
var name = params.CustomerName.substr(0, n);
var instId = params.CustomerName.substr(n+1, params.CustomerName.length);
const order = await strapi.services.orders.add({
userId: username,
username: name,
institutionId: instId,
sum: params.Sum,
transactionDate: today,
validity: date,
cardNum: params.CardNum,
cardName:params.CardName,
});
let axiosArr = {
institutions: [{_id: instId}],
validity: date,
secret: 'secret'
}
axios.put(apiUrl+'/users/'+username, axiosArr).then(() => {return order})
// return order
大部分代码与问题无关,我在想可能响应是 404 的原因是因为我没有立即返回订单对象,而是在 axios.put 之后才返回?
不幸的是我现在不能测试它
我不熟悉 strapi,但对我来说它听起来不像是身份验证问题。您确定这些路由设置为接受 POST 请求而不仅仅是 GET 请求吗?如果用户缺少访问资源所需的权限,return 404s 是很常见的,不让该人知道该资源存在但没有任何示例代码我无法确定您的情况。你能 link 更多代码吗?
如果路由执行良好但returns 404,那是因为响应主体为空。
在您的代码中,您注释了 return order
。
在您的代码中添加类似 ctx.send({order})
的内容或取消注释您的 return
您将不再有 404。
我有一个使用 React 和 Strapi headless CMS(使用 nodejs)构建的项目。使用 Strapi 处理的后端驻留在端口 443 中。当我使用 http://site:443 向后端中的任何 url 发送 GET 请求时,我得到一个有效的响应,但是 POST 请求总是returns 错误 404。
我使用外部工具 https://reqbin.com/ 对其进行了测试并得到了相同的结果。
有趣的是,即使我收到 404 响应,路由正在处理和执行,但仍返回 404 响应。
为什么会这样?
提前致谢
这是到达这条路线时的代码:
/**
* Create a/an orders record.
*
* @return {Object}
*/
create: async (ctx) => {
let params = ctx.request.body;
if (params.Sum) { // only if we got a good POST response
// check secret code
let a = params.UniqueID;
var res = a.substr(a.length - 12, a.length);
if (res !== 'secret') {
ctx.throw(500, 'SECURITY BLOCK', { expose: true });
return null;
}
var username = a.substr(0, a.length - 12);
// create validity
var date = new Date();
if (params.Sum === '250') { // one month membership
date.setTime( date.getTime() + 31 * 86400000 );
} else if (params.Sum === '390') { // one month membership
date.setTime( date.getTime() + 180 * 86400000 );
}
// create order in database
let today = new Date();
// extract username
var n = params.CustomerName.indexOf("_");
var name = params.CustomerName.substr(0, n);
var instId = params.CustomerName.substr(n+1, params.CustomerName.length);
const order = await strapi.services.orders.add({
userId: username,
username: name,
institutionId: instId,
sum: params.Sum,
transactionDate: today,
validity: date,
cardNum: params.CardNum,
cardName:params.CardName,
});
let axiosArr = {
institutions: [{_id: instId}],
validity: date,
secret: 'secret'
}
axios.put(apiUrl+'/users/'+username, axiosArr).then(() => {return order})
// return order
大部分代码与问题无关,我在想可能响应是 404 的原因是因为我没有立即返回订单对象,而是在 axios.put 之后才返回? 不幸的是我现在不能测试它
我不熟悉 strapi,但对我来说它听起来不像是身份验证问题。您确定这些路由设置为接受 POST 请求而不仅仅是 GET 请求吗?如果用户缺少访问资源所需的权限,return 404s 是很常见的,不让该人知道该资源存在但没有任何示例代码我无法确定您的情况。你能 link 更多代码吗?
如果路由执行良好但returns 404,那是因为响应主体为空。
在您的代码中,您注释了 return order
。
在您的代码中添加类似 ctx.send({order})
的内容或取消注释您的 return
您将不再有 404。