在YesIKnowWhatImDoingAndIStillWantToDoIt
我有这些方法:
util/index.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);
});
。这是一个Slack应用程序,在将这两个方法转移到另一个文件之前,它运行得很好。我还不太了解Node.js,因为这是我做的第一个应用程序。我习惯于编写像PHP这样的语言,但是,通过将方法分离到不同文件中的传统方式,我会抛出这个错误。
我认为问题出在Cannot POST /[route]
方法中,因为它在访问路径并完成数据库操作时会在通道中显示一条消息,但是当从另一个文件中请求它时,我可能需要做一些不同的事情
答案 0 :(得分:0)
感谢@SLaks评论,我可以思考并想出来。
首先,我已导出app
,必需并启动它:
u.app.listen(port, () => {
console.log('Server is now running on port ' + port);
});
其他问题仅仅是因为'/'
方法中url
参数之前缺少setStatus
:
let setStatus = url => {
POST('/' + url, req => db.users.insert({
username: req.body.user_name,
userid: req.body.user_id,
status: url.toUpperCase()
}));
};