Node + Github webhook用于用户活动

时间:2017-10-26 15:01:45

标签: javascript node.js github github-api

我会轻易解释我的问题:

我希望与github webhooks进行交互,以便在我的用户(或已登录的用户)点击回购时的星标(应该是此hook event)时获取。

我有一个简单的服务器,节点+快递,但我真的不明白如何执行此操作。有人能帮助我吗?

const chalk = require('chalk');
const express = require('express');
const serverConfig = require('./config/server.config');

const app = express();

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

console.log(chalk.bgGreen(chalk.black('###   Starting server...   ###'))); // eslint-disable-line

app.listen(port, () => {
  const uri = `http://localhost:${port}`;
  console.log(chalk.red(`> Listening ${chalk.white(serverConfig.env)} server at: ${chalk.bgRed(chalk.white(uri))}`)); // eslint-disable-line
});

1 个答案:

答案 0 :(得分:4)

对此进行快速测试的方法是使用ngrok从外部提供本地端口:

ngrok http 8080

然后使用ngrok提供的url和您的个人访问令牌使用API​​创建钩子。您还可以在repo hook部分https://github.com/ $ USER / $ REPO / settings / hooks /(选择watch个事件)中手动构建webhook:

curl "https://api.github.com/repos/bertrandmartel/speed-test-lib/hooks" \
     -H "Authorization: Token YOUR_TOKEN" \
     -d @- << EOF
{
  "name": "web",
  "active": true,
  "events": [
    "watch"
  ],
  "config": {
    "url": "http://e5ee97d2.ngrok.io/webhook",
    "content_type": "json"
  }
}
EOF

启动一个http服务器,监听使用您指定的POST端点公开的端口:

const express = require('express')
const bodyParser = require('body-parser')
const app = express()
const port = 8080;

app.use(bodyParser.json());

app.post('/webhook', function(req, res) {
    console.log(req.body);
    res.sendStatus(200);
})

app.listen(port, function() {
    console.log('listening on port ' + port)
})

启动它:

node server.js

服务器现在将收到主演活动

对于调试,您可以在钩子部分看到Github发送的请求:

https://github.com/$USER/$REPO/settings/hooks/

enter image description here