【问题标题】:Trying to move express API code to controller file试图将快速 API 代码移动到控制器文件
【发布时间】:2021-05-08 01:45:43
【问题描述】:

我在这里遗漏了一些明显的东西。

在我的路由/api 文件中,这工作正常(我从 mongodb 获得了预期的用户)

const User = require("../../database/models/User");
router.get("/getUsers", async(req, res) => {
  try {
   const users = await User.find();
   res.status(200).json(users)
} catch (error) {
    res.status(404).json({ message: error.message });
}

我正在尝试将此代码移动到控制器文件中。

const getUsers  = require ('./../../controllers/users_controller');
router.get("/getUsers", getUsers);

我将控制器文件导入到 routes/api

const User = require('../database/models/User');
module.exports = () => {
  getUsers = async(req, res) => {

    try {
      console.log ("getting users");
      const users = await User.find();
              
     // res.status(200).json(users);
     console.log("users:", users);
     res.status(200).json(users)
  } catch (error) {
      res.status(404).json({ message: error.message });
  }

  }

当我启动与第一个示例相同的端点时,我在 PostMan 中收到错误读取 ECONNRESET。任何帮助将不胜感激。

【问题讨论】:

    标签: node.js mongodb express routes controller


    【解决方案1】:

    在控制器中试试这样

    const User = require('../database/models/User');
    
      const getUsers = async(req, res ,next) => {
        try {
          console.log ("getting users");
          const users = await User.find();
                  
         // res.status(200).json(users);
         console.log("users:", users);
         res.status(200).json(users)
      } catch (error) {
          res.status(404).json({ message: error.message });
      }
      }
    
      exports.getUsers = getUsers;
    

    在路由文件中

    const usersController  = require ('./../../controllers/users_controller');
    router.get("/getUsers", usersController.getUsers);
    

    如果您在控制器中有多个功能:

    const User = require('../database/models/User');
     const getUsers = async(req, res ,next) => {
      //do somethings
      }
     const getUserById = async(req, res ,next) => {
      //do somethings
      }
      exports.getUsers = getUsers;
      exports.getUserById = getUserById;
    

    在路由文件中

    const usersController  = require ('./../../controllers/users_controller');
    router.get("/getUsers", usersController.getUsers);
    router.get("/getUsers/:id", usersController.getUserById);
    

    【讨论】:

    • 非常感谢!我实际上有类似于最后一部分的代码(控制器中的多个函数),但是我得到了与在你的例子中得到的相同的错误:Route.get() 需要一个回调函数,但得到一个 [object Object]。这是现在的整个控制器文件。 const User = require('../database/models/User'); const getUsers = async(req, res) => { try { console.log ("getting users"); const users = await User.find(); res.status(200).json(users) } catch (error) { res.status(404).json({ message: error.message }); } }
    • 尝试res.status(200).json({users}); 并再次向我展示结果,在邮递员正文中你得到了 [object, object]??
    • 哦,对不起 - 我说错了。给我错误的是编译器,而不是 PostMan。与您评论中更新的代码相同的错误:错误:Route.get() 需要一个回调函数但得到一个 [object Object]
    • 检查require ('./../../controllers/users_controller');的路径不正确
    • 奇怪!我添加了第二个较小的函数,只是为了验证 require 语句没有问题,现在原始函数正在编译和工作。再次感谢!!!!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-28
    • 1970-01-01
    • 1970-01-01
    • 2015-11-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多