繁体   English   中英

nodejs 从函数返回结果

[英]nodejs returning result from functions

这是我编写代码的方式

model\\user.js

'user strict';
var sql = require('./../db.js');

//User object constructor
var User = function(user){
    this.email = user.email;
    this.name = user.name;
    this.gender = user.gender;
    this.profileImageType = user.profileImageType;
    this.profileImage = user.profileImage;
    this.accountType = user.accountType;
    this.createdAt = new Date();
};
User.getCountByEmail = function (email, result) {
    console.log("entering user.getCountByEmail with")
    console.log(email)
        sql.query("Select COUNT(*) AS userCount from users where email = ? ", email, function (err, res) {             
                if(err) {
                    console.log("error: ", err);
                    return result(err, null);
                }
                else{
                    console.log("user getCountByEmail returns")
                    console.log(res)
                    return result(null, res);
                }
            });   
};

model\\userController.js

'use strict';

var User = require('./user.js');

exports.list_all_users = function(req,res){
    User.getAll(function(err,user){
        console.log('controller')
        if (err){
            res.send(err);
        }else{
            console.log('res', user)
            res.send(user)
        }
    });
};
exports.getCountByEmail = function(email,res){
    User.getCountByEmail(email, function(err,user){
      if (err){
          console.log('error', err)
          return res.send(err)
      }else{
          console.log('res', user)
          console.log(user)
          return user;
      }
    });
};

index.js

var userController = require('./../model/userController.js');
      userController.getCountByEmail("miow@email.com",res,function(err,result) {
        if (err){
          console.log("34 err")
          console.log(err)
        }else{
          console.log("imin userCount: " + result)
        }
      });

现在在我上面的index.js ,执行了userController.getCountByEmail行,但我希望可以在函数内部访问结果。 不幸的是,似乎代码

function(err,result) {
            if (err){
              console.log("34 err")
              console.log(err)
            }else{
              console.log("imin userCount: " + result)
            }

根本没有被执行。 我只得到了线路

res [ RowDataPacket { userCount: 1 } ]
imin
[ RowDataPacket { userCount: 1 } ]

这是在userController.js里面。 那么如何将userController.js的结果发送到index.js呢?

function(err,result) {
            if (err){
              console.log("34 err")
              console.log(err)
            }else{
              console.log("imin userCount: " + result)
            }

未执行,因为在您的模型/userController getCountByEmail 中,您只传递两个参数(电子邮件、res)。 所以当你在 index.js 中调用这个函数时,你实际上传递了三个参数。 第三个是

    function(err,result) {
            if (err){
              console.log("34 err")
              console.log(err)
            }else{
              console.log("imin userCount: " + result)
            }

我会这样做:

model/userController

exports.getCountByEmail = function(email,res){
    User.getCountByEmail(email, function(err,user){
      if (err){
          console.log('error', err)
          return res.send(err)
      }else{
          console.log('res', user)
          console.log(user)
          res.send(user);
      }
    });
};

index.js

userController.getCountByEmail("miow@email.com",res)

但通常控制器将 (req, res, next) 作为参数,并且res用作return因为它向服务器返回响应。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM