2017-02-02 1 views
0

NodeJS를 처음 접했고 Express 4를 처음 사용하는 경우 명령 줄 응용 프로그램을 중심으로 간단한 RESTful 프론트 엔드를 작성하려고합니다. 궁극적으로 하나의 GET과 하나의 POST가 필요하며 POST는 약 3 ~ 4 개의 다른 매개 변수를 처리합니다. GET은 모든 기본 매개 변수를 사용하여 명령 줄 응용 프로그램을 호출해야합니다.이 매개 변수는 기본적으로 상태 확인이며 완료시 종료 상태를 반환합니다. POST는 명령 줄에서 POST 매개 변수를 전달합니다. 이 기본적으로 child_process.execFile() 같은 비동기 호출을 호출하는 알고 있지만 콜백 함수 내에서 실제로 응답을 반환하는 방법을 알아낼 수 없습니다.NodeJS/Express 외부 응용 프로그램의 GET 종료 상태

MongoDB에 대한 필요성이 없어 시작점으로 사용한 튜토리얼입니다. 따라서 기본적으로 서버를 시작한 지점까지 따라갔습니다. 이 시점에서, 나는 꽤 길을 잃었다. 나는 항상

는 는
var express = require('express');  // call express 
var app  = express();     // define our app using express 
var bodyParser  = require('body-parser'); 
var child_process = require('child_process'); 

app.use(bodyParser.urlencoded({ extended: true })); 
app.use(bodyParser.json()); 

var port = process.env.PORT || 8080;  // set our port 

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

router.get('/', function(req, res) { 
    res.json({ message: 'hooray! welcome to our api!' }); 
}); 

router.get('/myapp/status', function(req, res) { 
    console.log(req.user); 
    child_process.execFile(
      'casperjs', 
      ['myfile.js', '--cmd="Status"', '--user="myuser"', '--pass="#mypass"'], 
      null, 
      function(response) { 
       // ??? 
      }, res); 
}); 

app.use('/api', router); 

app.listen(port); 
console.log('Magic happens on port ' + port); 

답변

0

당신은 시도 할 수 있습니다 ... 비동기 코드를 작성 싫어 다음

router.get('/myapp/status', function(req, res) { 
    console.log(req.user); 
    child_process.execFile(
     'casperjs', //command 
     ["myfile.js --cmd=Status --user=myuser --pass=#mypass"], // args 
     function(err, stdout, stderr) { //callback 
      if (err) { 
       return res.status(500).send(err); 
      } 
      res.send(stdout); // to send response to client 
     }); 
}); 
+0

을하지만 어떻게 익명 콜백 함수가 입술 어떤 생각을 가지고 있습니까? 꽤 비슷한 아이디어를 시도해 보았습니다. "res에는 멤버 함수가 없습니다."(또는 그 효과가있는 것)와 함께 항상 오류가 발생했습니다. res에 대한 참조를 콜백에 전달하는 방법이 있습니까? – qwertymodo

+0

범위 때문에 부모 변수는 자식 익명 함수에서 액세스 할 수 있습니다. 나는 그것을 시도하고 작동합니다. –

+0

좋아, 콜백이 호출되지 않는 것 같습니다. 그냥 확인하기 위해, 나는 외부 명령이 호출하고 있다고 가정하고 올바른 구문을 얻었 는가? 'casperjs myfile.js --cmd = "Status"--user = "myuser"--pass = "# mypass"' – qwertymodo

관련 문제