如何将数据从控制器传递到路由

how to pass data from conttoller to route

我正在尝试将数据从控制器传递到路由。

我想将状态代码从控制器更改为路由。假设如果处于控制器状态 200,则将其从路由

更改为 400

响应后只需简单打印 hello 或路由中的内容

这里是来自控制器文件的控制器
联系控制器。 js

exports.index = function(req, res) {
  Contact.get(function(err, contacts) {
    if (err) {
      res.json({
        status: "error",
        message: err
      });
    }

    res.json({
      status: "success",
      message: "Contacts retrieved successfully",
      data: contacts
    });
  });
};

这是来自路由文件的路由
联系 router.js

var contactController = require('./contactController');

// Contact routes
router.route('/contacts')
    .get(contactController.index)

按照本文使用 Express 路由器设计您的应用程序

https://scotch.io/tutorials/learn-to-use-the-new-router-in-expressjs-4

像这样定义你的控制器

exports.index = function(req, res, next) {
  Contact.get(function(err, contacts) {
    if (err) {
      next(null,{
        status: "error",
        message: err
      });
    }

    next({
      status: "success",
      message: "Contacts retrieved successfully",
      data: contacts
    },null);
  });
};

像这样定义主应用程序文件

var contactController = require('./contactController');
    var router = express.Router();
    // apply the routes to our application
    // route middleware that will happen on every request
    router.use(function(req, res, next) {
        // continue doing what we were doing and go to the route
        next(); 
    });

    // about page route (http://localhost:8080/about)
    router.get('/contacts', function(req, res) {
        //here you can call your controller js method
        contactController.index(req,res, function(data, err){
            //change anything you want here and set into res.
            if(err){
              //change status and data
            }
            else{
               //change status and data 
            }
         })
    });

不要结束控制器中的请求-响应循环,只是 return 来自控制器的结果而不是结束循环。

const httperror = require('http-errors');

exports.index = async function(parameter) {
  Contact.get(function(err, contacts) {
    if (err) {
     throw new httperror(400, "Error occured!");
    }

    return {
       status: "success",
       message: "Contacts retrieved successfully",
       data: contacts
    }
  });
};

请求应该从路由开始,响应应该从路由发送

const contactController = require('./contactController');

router.get('/contacts', function (req, res, next) {
   contactController.index()
     .then(result => {
        res.json(result)
     }).catch((error) => {
        res.status(200).json({"Error":"Returned success code 200 even though error 
        occured"});
   })
});