2016-06-01 8 views
0

"/ [ルート]をPOSTできません" 私は、これらのメソッドがあります:のNode.jsは<code>util/index.js</code>で

'use strict'; 

const parser  = require('body-parser'); 
const express  = require('express'); 
const app   = express(); 
const RtmClient  = require('@slack/client').RtmClient; 
const RTM_EVENTS = require('@slack/client').RTM_EVENTS; 
const db   = require('../db').db; 
const rtm   = new RtmClient(process.env.SLACK_API_TOKEN); 

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

rtm.start(); 

let POST = (url, handler) => { 
    app.post(url, (req, res) => { 
     handler(req) 
      .then(data => { 
       res.status(200).send(data); 
      }) 
      .catch(error => { 
       res.status(500).send('Error: ' + error.message || error); 
      }); 
    }); 
}; 

let setStatus = url => { 
    POST(url, req => db.users.insert({ 
     username: req.body.user_name, 
     userid:  req.body.user_id, 
     status:  url.toUpperCase() 
    })); 
}; 

module.exports = { 
    POST, 
    setStatus 
}; 

をそして、私のproject/index.jsに、私はこのようにそれらを呼び出す:

'use strict'; 

const port   = process.env.PORT || 3000; 

const db   = require('./db').db; 
const express  = require('express'); 
const app   = express(); 
const u    = require('./util'); 

u.POST('/logdash',() => db.users.select()); 
u.setStatus('here'); 
u.setStatus('out'); 
u.setStatus('break'); 
u.setStatus('left'); 
u.setStatus('sick'); 
u.setStatus('hungry'); 

app.listen(port,() => { 
    console.log('Server is now running on port ' + port); 
}); 

しかし、その後、私は取得します Cannot POST /[route]。これはSlackアプリケーションで、2つのメソッドを別のファイルに転送する前に、うまく機能していました。私はNode.jsをまだよく理解していません。これは私が初めて作ったアプリですから。私はPHPのような言語をプログラミングするのに慣れていますが、別のファイルへのメソッド分離のために同じ従来の方法を実行することで、このエラーが発生します。

ルートにアクセスしてデータベース操作が完了したときにチャネルにメッセージを表示するため、別のファイルから要求するときに別の処理を行う必要があるため、POSTメソッドに問題があると思います。

+0

あなたは2つの異なる 'app'を(2つのモジュールで)持っていて、あなたはそれらのうちの1つだけを起動しています。 – SLaks

+0

あなたは 'app.listen'を意味していますか? – mfgabriel92

+0

さて、私は理解しています。私は 'app'をエクスポートし、' u.app.listen'を使用しました。このように '/ logdash'コマンドは機能しましたが、他のコマンドは同じエラーを表示します。 – mfgabriel92

答えて

0

@SLaksのコメントのおかげで、私は考えることができました。

まず、私はこのようにそれを必要と、appエクスポートして開始しました:

u.app.listen(port,() => { 
    console.log('Server is now running on port ' + port); 
}); 

他の問題が原因で、単純だったsetStatus方法でurlパラメータの前に'/'を逃す:

let setStatus = url => { 
    POST('/' + url, req => db.users.insert({ 
     username: req.body.user_name, 
     userid:  req.body.user_id, 
     status:  url.toUpperCase() 
    })); 
}; 
関連する問題