快递间歇性退货"not found"



我已经使用express很多年了,我在打字方面有点生疏了-然而…我想我失明了!这是我第一次遇到这种情况,所以我一定是做错了什么…

我的问题是:

  • 我有一个端点名为"/status"
  • 当我调用它时,它有时会返回OK;
  • 而其他时候它会返回一个404 Not Found。
  • 这是同一个端点间歇性地执行此操作。

这是我的快递应用程序的代码:

import bodyParer from "body-parser";
import methodOverride from "method-override";
import helmet from "helmet";
import fileUpload from "express-fileupload";
import cors from "cors";
import { errors } from "celebrate";
import { expressRouter } from "./routes";
import config from "../config/config";
import { ErrorHandlers } from "../middleware";
const expressApp = express();
expressApp.use(bodyParer.json());
expressApp.use(methodOverride());
expressApp.use(helmet());
expressApp.use(fileUpload());
expressApp.use(cors());
expressApp.use(errors());
expressApp.use(config.api.v1Prefix, expressRouter);
const errorHandlers = new ErrorHandlers();
expressApp.use(errorHandlers.notFound);
expressApp.use(errorHandlers.handler);
export { expressApp };

路由器是这样的:

// import user from "../routes/user";
const expressRouter = Router();
expressRouter.get("/status", (req, res) => res.send("OK"));
// user(expressRouter); // TODO: finish this off when above '/status' works...
export { expressRouter };

我还怀疑我们拥有的错误处理程序,它们是这样的:

import { inversifyContainer } from "../config/inversify_config";
import { TYPES } from "../config/inversify_types";
import { Logger } from "../loaders/logger";
import httpStatus from "http-status";
export class ErrorHandlers {
loggerDependency = inversifyContainer.get<Logger>(TYPES.LoggerDependency);
notFound(req, res, next) {
const error = new Error("Not Found");
error["status"] = 404;
next(error);
}
public handler(err, req, res, next) {
const response = {
code: err.status,
message: err.message || httpStatus[err.status],
errors: err.errors,
stack: err.stack,
};
if (process.env.NODE_ENV !== "development") {
delete response.stack;
}
res.status(err.status);
res.json(response);
}
}

其他人以前有过这种经历吗?如果还有什么需要我帮忙的,请告诉我。

到现在我还不能确定问题。任何帮助将非常感激!

所以…ehmmm .

我们使用的是cloud foundry(在IBM中)。

发生的事情是,在过去,我们的continuous deployment得到卡住。然后我们手动取消该部署,以便排队的部署可以运行并继续:)

我今天意识到的是旧的应用程序从未被删除。这是一个运行在相同域(url)上的云代工服务,换句话说,这有效地使它成为2个运行实例。

旧服务显然没有这个新端点,而且永远也不会有,因为它是从部署中分离出来的。

一旦我删除了旧的服务,这个问题就完全消失了。

感谢所有花时间阅读这些废话的人。干杯!

最新更新