Node.js 在不同文件中创建简单API服务时出现问题

Node.js 在不同文件中创建简单API服务时出现问题,node.js,rest,express,endpoint,Node.js,Rest,Express,Endpoint,我想创建一个简单的RESTful服务来管理电影类型列表。首先,我尝试在一个文件(server.js)中处理对给定路由('/api/genres')的所有HTTP请求,我的代码工作正常,也就是说,当我处理来自主server.js文件的路由时,我能够发布电影、更新电影。但是,我试图在一个单独的文件中处理路由,但是我遇到了问题 问题: 似乎server.js中的my movies变量无法自我导出,因为我在generes.js中的console.log(movies)上得到了“未定义”。因此,对于pos

我想创建一个简单的RESTful服务来管理电影类型列表。首先,我尝试在一个文件(server.js)中处理对给定路由('/api/genres')的所有HTTP请求,我的代码工作正常,也就是说,当我处理来自主server.js文件的路由时,我能够发布电影、更新电影。但是,我试图在一个单独的文件中处理路由,但是我遇到了问题

问题:

  • 似乎server.js中的my movies变量无法自我导出,因为我在generes.js中的console.log(movies)上得到了“未定义”。因此,对于post和put请求,没有显示任何内容

  • 我读过router.get和app.get没有太大区别,但是app.get在genres.js中不起作用

    Server.js

  • var express = require("express"),
    app = express();
    const server = require("../../server");
    const router = express.Router();
    
    app.use(express.json());
    
    //importing movies array
    var movies = server.movies;
    
    router.get("/", (req, res) => {
      res.send(movies);
    });
    
    router.post("/", (req, res) => {
      var movie_obj = {
        name: req.body.name,
        genere: req.body.genere
      };
      movies.push(movie_obj);
      res.send(movie_obj);
    });
    
    router.put("/:id", (req, res) => {
      var flag = 0;
      movies.forEach(ele => {
        if (ele.name == req.params.id) {
          ele.name = req.body.name;
          flag = 1;
          res.send(movies);
        }
      });
      //if (flag == 0) res.send(`no such movie exists ${req.params.id}`);
    });
    module.exports = router;
    function newFunction() {
      return "movies";
    }
    
    genres.js

    var express = require("express"),
    app = express();
    const server = require("../../server");
    const router = express.Router();
    
    app.use(express.json());
    
    //importing movies array
    var movies = server.movies;
    
    router.get("/", (req, res) => {
      res.send(movies);
    });
    
    router.post("/", (req, res) => {
      var movie_obj = {
        name: req.body.name,
        genere: req.body.genere
      };
      movies.push(movie_obj);
      res.send(movie_obj);
    });
    
    router.put("/:id", (req, res) => {
      var flag = 0;
      movies.forEach(ele => {
        if (ele.name == req.params.id) {
          ele.name = req.body.name;
          flag = 1;
          res.send(movies);
        }
      });
      //if (flag == 0) res.send(`no such movie exists ${req.params.id}`);
    });
    module.exports = router;
    function newFunction() {
      return "movies";
    }
    

    还有,当我用app.get代替router.get时。我得到了以下错误:

    我不知道为什么电影不能正确导出到genres.js。但在导入时会出现循环引用,即,您将genres.js导入server.js,然后再次将server.js导入genres.js,这是必须避免的。而是将电影声明(或任何数据源)移动到genres.js。您还可以查看诸如app.set和app.get之类的express js应用程序范围的全局变量。如果这是您需要的,请查看这些解决方法