0

私はnodejsアプリに取り組んでいます。
フォルダ構成は

app
app.js
package.json
../model/schema.js
../controller/controller.js
../views


app.jsがルーティング自体を実行している間、すべてのロジックはcontroller.jsにあります.control.js
からapp.jsにデータ(オブジェクト)を取得/返す方法を知りたいです。
「return」を使用してmongodbドキュメントをコントローラーからアプリに送信していますが、未定義です。

app.js の Heres コード..i 不要なコードを削除しました

  var express = require('express'),
   app = express.createServer(express.logger()),
   io = require('socket.io').listen(app),
   routes = require('./routes');
   var controller=require('./controller/controller');
   var model=require('./model/schema');

   app.get("/", function(req, res) {
     res.render("chatroom.html");
    });

   io.sockets.on('connection', function (socket) {
      socket.on('login',function(user)
      {
          var onliner=controller.loginUser(user);
          console.log("Onlinersss: ",onliner);
      });

      socket.on('registerUser',function(user){
          controller.registerUser(user);
      });
   });



controller.js コードは次のとおりです。

  var model=require('../model/schema');
  exports.loginUser=function(user)
  {

      model.registerUser.findOne({uname:user.uname,pass:user.pass},function(err,doc){
        if(!err){ 
             console.log("Here loggedin: ",doc); 
             return doc;             
        }
        else
             console.log("Invalid username or password");
        });
  };
4

2 に答える 2

0

ほぼ同じライブラリとRethinkDBをデータベースとして使用するプロジェクトをGitHubにプッシュしました (MongoDB に非常に似ています)。基本的に、コントローラーに渡して、DB から取得したデータで呼び出す必要があります。リンクされたプロジェクトの app.js と lib/db.js を見てください。callbacks

于 2013-01-22T18:03:13.227 に答える
0

JavaScript (したがって node.js) は非同期です。「ドキュメントを返す」と、で定義された無名関数function(err, doc)が返されます...データを取得しようとしているloginUser関数ではありません。

loginUser はすぐに戻り、undefined を返します (他に何も指定していないため)。私の言いたいことを理解するには、'return true;' と入力してください。を loginUser の最後の行に追加すると、「true」の値が返されることがわかります。

ただし、値を返したくありません。値でコールバックしたい。それはstackoverflowの回答の範囲を超えているため、ここに良いリソースがあります:

http://bjouhier.wordpress.com/2011/01/09/asynchronous-javascript-the-tale-of-harry/

于 2013-01-22T10:47:58.087 に答える