2017-06-26 4 views
1

ノードアプリケーションがあります.3つのファイルがあり、ノードをMVCパターンで構造化しようとしています。ノードアプリケーションにMVCとインクルードファイルを使用する方法

私はすべての私が必要とし、私のserver.jscontroller.jsの私routes.jsと私の機能のすべてのルートの中の変数を配置する方法をしたいです。

私のルータは問題なく機能します。 は、どのように私は私のサーバーにファイルをコントローラからの機能が含まれます

私が持っている:

  • server.js

var configure = require('./router'); 
 
var express = require('express'); 
 
var app = express(); 
 
var port = process.env.PORT || 8080; 
 

 
// get an instance of router 
 
var router = express.Router(); 
 
configure(router); 
 

 
var request = require('request'); 
 
var nodePardot = require('node-pardot'); 
 
var bodyParser = require('body-parser'); 
 
var rp = require('request-promise'); 
 

 
// Start the server 
 
app.listen(port); 
 
app.use(bodyParser.json()); // support json encoded bodies 
 
app.use(bodyParser.urlencoded({extended: true})); // support encoded bodies 
 
console.log('Test server started! At http://localhost:' + port); // Confirms server start 
 
// 
 
// // START THE SERVER 
 
// // ============================================== 
 
app.listen(port); 
 
console.log('Server has started!! ' + port); 
 

 
// apply the routes to our application 
 
app.use('/', router);

  • router.js `

module.exports = function (router) { 
 
    
 
      // route middleware that will happen on every request 
 
      router.use(function (req, res, next) { 
 
     
 
       // log each request to the console 
 
       console.log(req.method, req.url); 
 
     
 
       // continue doing what we were doing and go to the route 
 
       next(); 
 
      }); 
 
     
 
     // home page route (http://localhost:8080) 
 
      router.get('/', function (req, res) { 
 
       res.send('im the home page!'); 
 
      }); 
 
    
 
    
 

 
    router.get('/login', function (req, res) { 
 
       res.send('this is the login form'); 
 
      }) 
 
    
 
      // process the form (POST http://localhost:8080/login) 
 
      .post('/login', function (req, res) { 
 
       console.log('processing'); // shows on console when post is made 
 
       res.send('processing the login form!'); // output on postman 
 
      }); 
 
    };

  • controller.js

var password = 'gf.09'; 
 
    var userkey = 'dfgg'; 
 
    var emailAdmin = '[email protected]'; 
 
    
 
    // Start the server 
 
    app.listen(port); 
 
    app.use(bodyParser.json()); // support json encoded bodies 
 
    app.use(bodyParser.urlencoded({extended: true})); // support encoded bodies 
 
    console.log('Test server started! At http://localhost:' + port); // Confirms server start 
 
    
 
    var firstFunction = function() { 
 
     return new Promise (function (resolve) { 
 
      setTimeout(function() { 
 
       app.post('/back-end/test', function (req, res) { 
 
        console.log(req.body); 
 
        var login = req.body.LoginEmail; 
 
        res.send(login); 
 
        resolve({ 
 
         data_login_email: login 
 
        }); 
 
       }); 
 
       console.error("First done"); 
 
      }, 2000); 
 
     }); 
 
    }; 
 
    
 
    var secondFunction = function() { 
 
     return new Promise (function (resolve) { 
 
      setTimeout(function() { 
 
       nodePardot.PardotAPI({ 
 
        userKey: userkey, 
 
        email: emailAdmin, 
 
        password: password, 
 
        DEBUG: false 
 
       }, function (err, client) { 
 
        if (err) { 
 
         // Authentication failed 
 
         console.error("Authentication Failed", err); 
 
        } else { 
 
         // Authentication successful 
 
         var api_key = client.apiKey; 
 
         console.log("Authentication successful !", api_key); 
 
         resolve({data_api: api_key}); 
 
        } 
 
       }); 
 
       console.error("Second done"); 
 
      }, 2000); 
 
     }); 
 
    }; 
 
    
 
    
 
    function thirdFunction(result) { 
 
     return new Promise (function() { 
 
      setTimeout(function() { 
 
       var headers = { 
 
        'User-Agent': 'Super Agent/0.0.1', 
 
        'Content-Type': 'application/x-www-form-urlencoded' 
 
       }; 
 
    // Configure the request 
 
       var api = result[1].data_api; 
 
       var login_email = result[0].data_login_email; 
 
       var options = { 
 
        url: 'https://pi.pardot.com/api/prospect/version/4/do/read', 
 
        method: 'POST', 
 
        headers: headers, 
 
        form: { 
 
         'email': login_email, 
 
         'user_key': userkey, 
 
         'api_key': api 
 
        }, 
 
        json: true // Automatically stringifies the body to JSON 
 
       }; 
 
    
 
    // Start the request 
 
       rp(options) 
 
        .then(function (parsedBody) { 
 
         console.error(login_email, "Is a user, login pass!"); 
 
    
 
        }) 
 
        .catch(function (err) { 
 
         console.error("fail no such user"); 
 
         // res.status(400).send() 
 
    
 
        }); 
 
       console.error("Third done"); 
 
      }, 3000); 
 
     } 
 
     ); 
 
    } 
 
    
 
    // sequence of functions 
 
    Promise.all([firstFunction(), secondFunction()]) 
 
     .then(thirdFunction);
私は

var routers = require('./router'); 
var controller = require('./test'); 
// var controller = require('./test.js','./router'); 
var express = require('express'); 
var request = require('request'); 
var nodePardot = require('node-pardot'); 
var bodyParser = require('body-parser'); 
var rp = require('request-promise'); 
var app = express(); 
var port = process.env.PORT || 8080; 
var router = express.Router(); 

routers(router); 
controller(Promise); 

module.exports = function (Promise) { 

all functions 

} 

問題を試してみましたが、何

は、変数の一部がので、私のようなエラーが出controller.jsに利用できないです:

app.post( '/バックエンド/コントローラの、機能(REQ、RES){

  ^

答えて

1

あなたrouter.jsに適用されるように、これは死んで簡単な使用と同じロジックです。

controller.jsで以下のようなものを使用する:

exports.function_name = function(params, ...){ 
. . . 
} 

次にコントローラをインポートすることで、これらの機能にアクセスします。あなたは、オブジェクトを返すようにしたい場合は

var controller = require('./controller.js'); 
controller.function_name(param..) # execute with required params and callback 

jsのあなたが行うことができますmodule.exportsは

module.exports = Promise.all([firstFunction(), secondFunction()]) .then(thirdFunction); 

コントローラオブジェクトは、今では

var controller = require('./controller.js'); 

コントローラオブジェクトを直接使用することができる約束が含まれています今は関数を呼び出す必要はありません。

もっと良い選択肢は、controller.jsからすべての関数をエクスポートし、次にapp.jsでpromiseでそれらを使用できることです。

+0

私はあなたを得ました、私は前にこれを試していたが、動作することができませんでした。もう一度試してみてください。ありがとう – Beep

+0

これまでに経験したエラーを言えればそれは素晴らしいでしょう –

+1

ええ、そうです。あなたがエラーを受け取ったらもう一度やり直してください。あなたの回答を受け入れることができない場合には、回答を更新してください。 – Beep

関連する問題