2016-06-01 67 views
0

util/index.js我有以下方法:Node.js的 「無法發佈/ [路徑]」

'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應用程序,並且在將這兩種方法轉換爲另一個文件之前,它運行良好。我還不太瞭解Node.js,因爲這是我製作的第一個應用程序。我習慣於像PHP這樣的編程語言,但是通過使用與傳統的方法分離到不同文件中相同的方式,我發現了這個錯誤。

我認爲這個問題出現在POST方法中,因爲它在訪問路由和完成數據庫操作時在通道中顯示一條消息,但是當我需要從另一個文件進行操作時,我可能需要做一些不同的操作。

+0

你有兩個不同的'app's(在這兩個模塊中),你只能啓動其中的一個。 – 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() 
    })); 
};