2016-06-14 1 views
0

게시 요청을 처리 한 다음 다른 서버에 POST 요청을 수행 한 다음 반환 된 정보를 기반으로 사용자를 리디렉션하는 웹 응용 프로그램을 구축하고 있습니다.별도의 노드 모듈에서 Express를 사용하여 POST 요청 수행

최종 결과는 사용자 이름에 사용자 유형을 입력하고 제출 -> 응용 프로그램이 게시물을 처리하고 사용자 이름을 취함 -> 응용 프로그램이 사용자 이름 -> 서버가 사용자의 서버 URL을 반환하는 외부 서버에 게시를 수행함 -> 응용 프로그램이 사용자를 해당 응용 프로그램으로 리디렉션해야합니다.

server.js

var express = require('express'); 
var app = express(); 
var bodyParser = require('body-parser'); 
var findUser = require('./findUserInstance') 

// Create application/x-www-form-urlencoded parser 
var urlencodedParser = bodyParser.urlencoded({ extended: false }) 

app.use(express.static('public')); 

app.get('/index.htm', function (req, res) { 
    res.sendFile(__dirname + "/" + "index.htm"); 
}) 

app.post('/process_post', urlencodedParser, function (req, res) { 

    // Prepare output in JSON format 
    response = { 
     username:req.body.username 
    }; 
    var uUrl = findUser.url(response.username); 
    console.log("redirecting to " + uUrl); 
    res.redirect(findUser.url(response.username)); 
    res.end(JSON.stringify(response)); 
}) 

var server = app.listen(8081, function() { 

    var host = server.address().address 
    var port = server.address().port 

    console.log("App listening at http://%s:%s", host, port) 

}) 

findUserInstance.js

exports.url = function(uName) { 

    var http = require("https"); 
    var uUrl; 

    var options = { 
     "method": "POST", 
     "hostname": "removed", 
     "port": null, 
     "path": "removed", 
     "headers": { 
      "appkey": "removed", 
      "content-type": "application/json", 
      "cache-control": "no-cache", 
      "Accept": "application/json", 
      "postman-token": "7d87bcf1-8e11-9717-2f6e-8150a5625acd" 
     } 
    }; 

    var req = http.request(options, function (res) { 
     var chunks = []; 

     res.on("data", function (chunk) { 
      chunks.push(chunk); 
     }); 

     res.on("end", function() { 
      var body = Buffer.concat(chunks); 
      var jsoncontent = JSON.parse(body); 
      uUrl = jsoncontent.rows[0].url; 
      console.log("The following should be: user.instance.url.com) 
      console.log(jsoncontent.rows[0].url); 
      return uUrl; //The information that I want to return to server.js 
     }); 
    }); 

    req.write(JSON.stringify({username: uName})); 
    req.end(); 
} 

문제가 리디렉션을 수행 할 수 있도록 server.js 모듈 외부 포스트 모듈로부터 정보를 돌려 보내는 것이다. 현재 함수에서 반환 된 uUrl 변수 (게시물의 URL로 올바르게 채워짐)가 있습니다. 그러나 findUserInstance 모듈은 null을 반환합니다.

findUserInstance 모듈에서 server.js 모듈로 uUrl의 값을 가져 오는 방법은 무엇입니까?

답변

1

@ 브라이언 euton 좋은 응답 findUserInstance에있는 어떤 객체라도 약속처럼 반환해야합니다! https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Objets_globaux/Promise

exports.url = function(uName) { 
    return new Promise(function (resolve, reject){ 

    var http = require("https"); 
    var uUrl; 

    var options = { 
     "method": "POST", 
     "hostname": "removed", 
     "port": null, 
     "path": "removed", 
     "headers": { 
     "appkey": "removed", 
     "content-type": "application/json", 
     "cache-control": "no-cache", 
     "Accept": "application/json", 
     "postman-token": "7d87bcf1-8e11-9717-2f6e-8150a5625acd" 
     } 
    }; 

    var req = http.request(options, function (res) { 
     var chunks = []; 

     res.on("data", function (chunk) { 
     chunks.push(chunk); 
     }); 

     res.on("end", function() { 
     var body = Buffer.concat(chunks); 
     var jsoncontent = JSON.parse(body); 
     uUrl = jsoncontent.rows[0].url; 
     console.log("The following should be: user.instance.url.com) 
     console.log(jsoncontent.rows[0].url); 
     resolve(uUrl); //The information resolve promise with your datas 
     }); 

    }); 

    req.write(JSON.stringify({username: uName})); 
    req.end(); 

    }); 

} 
예 이제 server.js에 uurl
+0

감사합니다! 이것은 멋지지만 여전히 문제가 있습니다. 이제 url 함수는 [object Object]를 반환합니다 (값 없음). server.js에서 무엇인가를 수정해야합니까? – mcheli

0

비동기 변경 핸들러 :

app.post('/process_post', urlencodedParser, function (req, res) { 

    // Prepare output in JSON format 
    response = { 
    username:req.body.username 
    }; 

    findUser.url(response.username).then(function(uUrl){ 

    console.log("redirecting to " + uUrl); 
    res.redirect(findUser.url(response.username)); 
    res.end(JSON.stringify(response)); 

    }); 

}); 
+0

우수! 완벽하게 작동합니다. 많이 고마워 soo soo! – mcheli

관련 문제