Nodejs从控制器调用控制器给出TypeError:res.json不是函数

时间:2017-05-31 11:56:52

标签: javascript angularjs node.js

为什么它看不到我的调用函数的 res 部分?

这是我的调用函数 frontpageController.js

exports.getFrontpage = function(req, res) {

    var priceController = require('./priceController');
    var priceModel = require('../models/priceModel');
    var priceTable = mongoose.model('priceModel');
    var callPriceController = function() {
        return new Promise((resolve, reject) => {
        priceController.getPrice (
        { "body": { "propertyID": "WAT-606" } }
        ,function(err, data) {
                console.log("HELLO!!! ");
            if (!err) {
                console.log("Result: " + JSON.stringify(data, null, 4));
            } else {
                console.log("ERR: " + err);
            };
        });
    })};

    callPriceController()
        .catch(err => {
            console.log("getFrontpage ERR: " + err);
            //res.json({error:true,err});
        })
    }

这是我想要调用 getData

的控制器
exports.getPrice = function(req, res){

    // 
    // Validate the data we get from router
    // 
    console.log("priceController received: " + JSON.stringify(req.body, null, 4));
    res.json({error:false,test:"hello from getPrice"});
}

这是控制台日志:

GET /frontpageRoute/getFrontpage - - ms - -
priceController received: {
    "propertyID": "WAT-606"
}
getFrontpage ERR: TypeError: res.json is not a function

这是getPrice路由器:

var express = require('express');
var router = express.Router();
var priceController = require('../controllers/priceController');

router.post('/getPrice', function(req, res) {
    priceController.getPrice(req, res);
});

module.exports = router;

这是首页路由器

var express = require('express');
var router = express.Router();
var frontpageController = require('../controllers/frontpageController');

router.get('/getFrontpage', function(req, res) {
    frontpageController.getFrontpage(req, res);
});

module.exports = router;

3 个答案:

答案 0 :(得分:1)

由于getPrice(req, res)需要reqres,因此您必须在致电getPrice时将其传递。将 frontpageController.js 更新为此内容并查看其是否有效 -

exports.getFrontpage = function(req, res) {

var priceController = require('./priceController');
var priceModel = require('../models/priceModel');
var priceTable = mongoose.model('priceModel');
var callPriceController = function() {
    return new Promise((resolve, reject) => {
    priceController.getPrice ({ "body": { "propertyID": "WAT-606" } }, res,
    ,function(err, data) {
            console.log("HELLO!!! ");
        if (!err) {
            console.log("Result: " + JSON.stringify(data, null, 4));
        } else {
            console.log("ERR: " + err);
        };
    });
})};

callPriceController()
    .catch(err => {
        console.log("getFrontpage ERR: " + err);
        //res.json({error:true,err});
    })
}

答案 1 :(得分:0)

callGetData()
.catch(err => {
    console.log("ERR: " + err);
    res.json({error:true,err})
}

res未在此范围内定义,这就是您收到此错误的原因

答案 2 :(得分:0)

我相信我明白这里发生了什么。

您正在致电myController.getData,对吧?但是,此功能定义如下:

exports.getData = function(req, res){ }

所以它期待两个论点:reqres

但看看你传递给它的是什么:第一个参数是{ "test": "TestData" },第二个参数是function(err, data) {...}

所以,在getData:

req == { "test": "TestData" }
res == function(req, res){...}

因此,res已定义,但绝对不是您期望的那样。事实上,res.json不是一个功能。

我认为getPrice应该这样定义:

exports.getPrice = function(req, callback){       
    callback( null, {error:false, test:"hello from getPrice"});
}

现在,回到你的承诺,你得到err==null和正确的数据。