2017-05-04 8 views
0

특정 서버 기능을 위해 별도의 JS 파일을 만들었습니다. 다음과 같은 샘플 코드 :ExpressJS - 라우팅 기능

내-data.js 내 app.js에서

var exports = module.exports = {}; 
exports.getData = function (request, response) { 
    var myData = [ 
     { 
      "value": 1 
     }, 
     { 
      "value": 2 
     }, 
    ]; 
    response.json(myData); 
}; 

, 내가 요청이되었을 때 특정 함수를 호출하는 것을 시도하고있다. app.js

var express = require("express"); 
var app = express(); 
var port = process.env.PORT || 3000; 
var myData = require("./lib/my-data.js"); 

app.engine(".html", require("ejs").__express); 
app.set("views", __dirname + "/views"); 
app.set("view engine", "html"); 
app.use(express.static(__dirname)); 

// Line below is what I'm trying to achieve. 
//app.get("/get-data", myData.getData(request, response)); 

// Working line 
app.get("/get-data", function(request, response) { 
    myData.getData(request, response); 
}); 

app.get("*", function (request, response) { 
    response.render("index"); 
}); 

app.listen(port, function() { 
    console.log("Listening on port " + port); 
}); 

그것은

app.get("/get-data", function(request, response) { 
     myData.getData(request, response); 
}); 

가하는 동안 라인 app.get("/get-data", myData.getData(request, response));이 작동하지 않는 날 귀찮게의

근무 샘플.

두 방법의 차이점은 무엇입니까?

내가 깨끗하고 정밀하지만 처음부터 사용하는 것을 선호하지만 제대로 작동하지 않는 것 같습니다.

+2

시도해 보셨습니까? 'app.get ("/ get-data", myData.getData); –

+0

안녕하세요 @ 넬슨 예, 작동했습니다. 답변으로 질문을 게시 할 수 있도록 답변으로 게시 하시겠습니까? 또한 내 접근 방식이 왜 작동하지 않는지 간단히 설명 할 수 있습니까? –

답변

1

app.get("/get-data", myData.getData);이이 문제를 해결합니다.

app.get은 두 번째 매개 변수로 제공하는 콜백 함수 을 제공 할 수 있습니다.

이 문제를 단순화하고 해당 함수를 get(string, func)이라고합니다. 이 함수 내부에서, 일반적으로 당신이 제공하는 함수를 호출 것 :

function get(string, func) { 
    var request = "foo"; 
    var response = "bar"; 
    // ... 
    func(request, response); 
} 

그래서 당신이 그것을 올바르게 함수를 호출하는 함수의 이름을 통과해야하므로 app.get("/get-data", myData.getData); 작품.

그러나 첫 번째 경우처럼 두 번째 매개 변수를 get("/get-data", myData.getData(request, response));으로 입력하면 func 매개 변수에는 함수가 있지만 더 이상 값은 myData.getData(...) 함수에서 반환됩니다.

예를 들어, 함수 인 경우이 :

function getData(req, res) { 
    return 1; 
} 

같은 일을 끝낼 것 get 기능 :

app.get("/get-data", function(request, response) { 
    myData.getData(request, response); 
}); 

이를 : 두 번째 경우

get("foo", 1) { 
    // ... 
    1(request, response); 
} 

을 이제 익명 함수을 전달합니다. 콜백 함수를 호출하면 내부 함수를 호출하기 때문에 예상대로 작동합니다.