2016-06-01 53 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() 
    })); 
};