1

probot文档提到我可以像在 vanilla Express 服务器中一样使用路由。

我想为这些路由设置 CORS 源头。在 vanilla Express 服务器中,我会使用 cors 包:

const cors = require('cors')

...

app.use(cors())

但是probot app没有这个功能use

module.exports = app => {
  app.use(cors(corsOptions));
// ...

导致错误:

ERROR (event): app.use is not a function
    TypeError: app.use is not a function

如何设置 CORS?

4

1 回答 1

3

您必须以编程方式启动应用程序。这样,您可以在 probot 加载后但在 Probot 开始运行之前访问 Express 应用程序:

const cors = require("cors");
const bodyParser = require("body-parser");
const { Probot } = require("probot");
const { corsOptions } = require("./src/util/init-server.js");
const endpoint = require("./src/controller/endpoint");
const { handleWhatever } = require("./src/controller/controller");


// https://github.com/probot/probot/blob/master/src/index.ts#L33
const probot = new Probot({
  id: process.env.APP_ID,
  port: process.env.PORT,
  secret: process.env.WEBHOOK_SECRET,
  privateKey: process.env.PRIVATE_KEY,
  webhookProxy: process.env.WEBHOOK_PROXY_URL,
});


const probotApp = app => {
  /** Post a comment on new issue */
  app.on("issues.opened", async context => {
    const params = context.issue({ body: "Hello World!" });
    return context.github.issues.createComment(params);
  });

  /** --- Express HTTP endpoints --- */
  const router = app.route("/api");
  router.use(cors(corsOptions)); // set CORS here
  router.use(bodyParser.json());
  router.use(bodyParser.urlencoded({ extended: true }));
  // router.set("trust proxy", true);
  // router.use(require('express').static('public')); // Use any middleware
  router.get("/ping", (req, res) => res.send("Guten Tag! " + new Date()));
  router.post(endpoint.handleWhatever , handleWhatever );
};


/** --- Initialize Express app by loading Probot --- */
probot.load(probotApp);

/* ############## Express instance ################ */
const app = probot.server;
const log = probot.log;
app.set("trust proxy", true);

/** --- Run Probot after setting everything up --- */
Probot.run(probotApp);

这里有一些帮助我回答问题的 GitHub 问题和文档:

于 2020-09-10T03:45:46.240 回答