提问者:小点点

在研究NodeJ时,我遇到了“无法获得‘地址’”的问题


在研究Nodejs时,我遇到了“无法获得‘地址’”的问题,我几天前开始研究Nodejs。

我试着使我的本地服务器,并按其用法划分文件。

在我的节点项目中,有

1.索引(主文件)2.路由3.路由器文件夹(包括全局路由器、课程路由器...等)4.控制器文件夹(包括全局控制器、课程路由器...等)5.babelrc 6.package.json

这是我的index.js


    import express from "express";
    import routes from "./routes";
    import globalRouter from "./routers/globalRouter";
    import coursesRouter from "./routers/coursesRouter";
    // import apiRouter from "./routers/apiRouter";
    // import apiV1Router from "./routers/apiV1Router";
    // import apiV2Router from "./routers/apiV2Router";

    const app = express();

    app.use(routes.home, globalRouter);
    app.use(routes.courses, coursesRouter);
    //app.use(routes.apiDocumentation, apiRouter);
    //app.use(routes.apiV1, apiV1Router);
    //app.use(routes.apiV2, apiV2Router);

    // app.use(routes.remove, apiV2Router);
    // app.use(routes.edit, apiV2Router);

    // Codesanbox does not need PORT :)
    app.listen(() => console.log(`Listening!`));

这是我的GlobalRouter.js


    import express from "express";
    import routes from "../routes";
    import {
      home,
      join,
      login,
      confirmAccount
    } from "../controllers/globalController";

    const globalRouter = express.Router();

    globalRouter.get(routes.home, home);
    globalRouter.get(routes.join, join);
    globalRouter.get(routes.login, login);
    globalRouter.get(routes.confirmAccount, confirmAccount);

    export default globalRouter;

这是我的globalController


    export const home = (req, res) => res.send("home");
    export const join = (req, res) => res.send("join");
    export const login = (req, res) => res.send("login");
    export const confirmAccount = (req, res) => res.send("confirm account");

我的课程路由器


    import express from "express";
    import routes from "../routes";
    import { courses, _new, mine } from "../controllers/coursesController";

    const coursesRouter = express.Router();

    coursesRouter.get(routes.courses, courses);
    coursesRouter.get(routes.new, _new);
    coursesRouter.get(routes.mine, mine);

    export default coursesRouter;

我的CourseController


    export const courses = (req, res) => res.send("courses");
    export const _new = (req, res) => res.send("new");
    export const mine = (req, res) => res.send("mine");

我的Routes.js


    //Global
    const HOME = "/";
    const JOIN = "/join";
    const LOGIN = "/login";
    const CONFIRM_ACCOUNT = "/confirm-account";

    //Courses
    const COURSES = "/courses";
    const NEW = "/courses/new";
    const MINE = "/courses/mine";

    //Api
    const API = "/api";
    const API_DOCUMENTATION = "/api/documentation";

    //Api V1
    const API_V1 = "/api/v1";
    const API_V1_BUY = "/api/v1/buy";
    const API_V1_REFUND = "/api/v1/refund";

    //Api V2
    const API_V2 = "api/v2";
    const API_V2_REMOVE = "/api/v2/remove";
    const API_V2_EDIT = "/api/v2/edit";

    const routes = {
      home: HOME,
      join: JOIN,
      login: LOGIN,
      confirmAccount: CONFIRM_ACCOUNT,
      courses: COURSES,
      new: NEW,
      mine: MINE,
      api: API,
      apiDocumentation: API_DOCUMENTATION,
      apiV1: API_V1,
      apiV2: API_V2,
      apiV1Buy: API_V1_BUY,
      apiV1Refund: API_V1_REFUND,
      apiV2Remove: API_V2_REMOVE,
      apiV2Edit: API_V2_EDIT
    };

    export default routes;

我不认为路线有问题但是...

当我单独测试全局路由器时,它工作((ex)“localhost:4000/”结果:home或“localhost:4000/join”结果:join)但当我解除对courses router的注释并搜索“localhost:4000/courses”时,它却没有...并抛出结果“cannot get/courses”..

我需要帮助来解决问题...


共1个答案

匿名用户

在您的主路由器中,您将每个以“/courses”开头的请求路由到courses路由器,而courses路由器将回答与“/courses”本身匹配的请求,因此您的API端点实际上在“/courses/courses”下可用。您可能希望将课程路由器中的路径更改为。获取(“/”...