gpt4 book ai didi

javascript - Express 不会从一个 Controller 返回 HTTP 响应,但在其他 Controller 中会返回 HTTP 响应

转载 作者:行者123 更新时间:2023-12-01 01:20:48 26 4
gpt4 key购买 nike

感谢您研究我的问题。

我有一个node/express服务器,配置了一个server.js文件,它调用urls.js,而urls.js又调用 Controller 来处理http请求,所有这些都配置相同并且工作正常,除了一个。

这是我的 OrderController。 OrderController.js 永远不会被调用,因此永远不会返回任何 HTTP 响应,即使我确信它应该被调用。

我尝试在 OrderController.js 上添加日志记录语句,但它们从未触发。我的 OrderController.js 中根本没有运行。

我仔细检查了我的 urls.js 文件,但找不到任何线索为什么 OrderController 无法加载,而我的其他 8 个 Controller 都工作正常。

我已将日志记录语句添加到我的 server.js 文件中,以确保我的 server.js 文件确实处理所有 http 请求并将它们正确地传递到我的 urls.js 文件。

我已将日志语句添加到我的 urls.js 文件中以确认它正在执行。

我已经记录了 Controller ,包括 require(OrderController.js) 和我的其他 Controller ,并检查了转储的 json 对象,但无法从我得到的输出中确定任何不同或错误的内容。

存储库是:https://github.com/allenchan3/foodproject/tree/40a43231ae49989a35fb0c004a897bbee69fe669

理论上,问题应该出在 urls.js 的某个地方。 :

const path = require("path");
const staticFilesError = require("./errors").errorHTML;
module.exports = function(app, staticDir) {
const loginRegController = require(path.join("..","controllers","LoginRegController"));
const controllers = {
'categories': require(path.join("..","controllers","CategoryController")),
'diningrooms':require(path.join("..","controllers","DiningRoomController")),
'ingredients':require(path.join("..","controllers","IngredientController")),
'items': require(path.join("..","controllers","ItemController")),
'options': require(path.join("..","controllers","OptionController")),
'orders': require(path.join("..","controllers","OrderController")),
'tables': require(path.join("..","controllers","TableController")),
'users': require(path.join("..","controllers","UserController")),
};

for (key in controllers) {
app.use("/api/"+key, controllers[key]);
}
app.use(loginRegController);
app.get(/^\/api\//, (req, res) => res.status(404).json({"error":req.url+" not found"}));
app.get("*", (_,res) => res.sendFile(staticDir+"/index.html"));
}

我只是尝试向 /api/orders/ 发出 HTTP GET 请求并从订单 Controller 获取一些内容(目前它应该从我的数据库获取所有订单的列表)。我还为 /hello 创建了一个处理程序,因此 /api/orders/hello 应该至少返回一些东西。实际发生的情况是没有任何 http 响应,甚至没有 404,我不知道为什么。

最佳答案

我克隆了您的存储库并能够重现该错误。

在authentication.js中,handleOrders()函数似乎只处理作为经理、调酒师、服务员或收银员的用户。如果 req.session.userType 未设置或者它等于 cook 或 customer,则 if 语句不会处理它,并且将无限期挂起。

您能否尝试以不同类型的用户身份调用 API 并确认这一点?

如果用户类型错误,您可能需要如下的 else 来抛出 403。

function handleOrders(req, res, next) {
console.log('handling')
if (req.session.userType == "manager") {
console.log('i am manager')
next();
} else if (["bartender","server","cashier"].indexOf(req.session.userType) > -1) {
console.log('am i a cahsier or server or bartender')
if (req.url == "/api/order" && req.method == "GET") {
console.log('in this if')
next();
}
else {
//not a get
Order.findById(req.params.id,(err,data)=>{
if (err) {
console.log(err);
res.status(500).json(err);
} else {
console.log(data);
next();
}
});
}
} else res.status(403).send(errors.forbidden);

}

关于javascript - Express 不会从一个 Controller 返回 HTTP 响应,但在其他 Controller 中会返回 HTTP 响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54245893/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com