如何编写将使用Express API的Azure函数

时间:2018-09-07 18:38:54

标签: node.js azure azure-functions

我有天蓝色的功能, 在index.js中,我有以下代码

module.exports = function (context, req) {

const createHandler = require('azure-function-express').createHandler;
const app = require('express')();

app.get("/home", (req, res) => {
    const y = { "name": "name", "dob": "ddmmyyyy" }
    context.res = y
    context.done()
});
module.exports = createHandler(app);

context.done();
};

我有function.json:

    {
  "bindings": [
    {
      "authLevel": "anonymous",
      "type": "httpTrigger",
      "direction": "in",
      "name": "req",
      "route": "{*segments}"
    },
    {
      "type": "http",
      "direction": "out",
      "name": "res"
    }
  ],
  "disabled": false
}

我的azure函数中包含上述文件,但是如果我按了api端点,我将无法获得任何输出,只是空白页。 我必须使用express来处理许多其他端点,而azure函数中是否有任何处理方法。

当我使用nodejs本地应用程序设置时,我能够在单个模块中使用express并处理许多api端点,而在azure函数中可能吗?或者我必须为每个端点使用不同的功能

2 个答案:

答案 0 :(得分:4)

请参见下面的代码。我们可以将Azure功能用作通用快递应用程序。

const createHandler = require('azure-function-express').createHandler;
const app = require('express')();

app.get("/home", (req, res) => {
    res.json({ "name": "name", "dob": "ddmmyyyy" });
});

app.get("/work", (req, res) => {
    res.json({ "name": req.query.name, "dob": "ddmmyyyy" });
});

module.exports = createHandler(app);
如果使用module.exports = function (context, req),则

context.done()azure-function-express不再有用。如果要使用其他上下文方法,请改用req.context。参见azure-function-express module doc

此外,Azure函数默认在路由中带有前缀“ api”,如果不需要它(如上面的代码),请将其更改为清空host.json

如果您的函数运行时为〜2(测试版)。

{
  "version": "2.0",
  "extensions": {
    "http": {
        "routePrefix": ""
    }
  }
}

其他〜1

{
    "http": {
        "routePrefix": ""
    }
}

答案 1 :(得分:0)

我也尝试过这个 azure-function-express 包,但它仍在开发中,需要大量改进。我找到的最好的包是 Azure AWS Severless Express

包裹。它非常易于使用和兼容。您可以轻松使用带有 azure 功能的 Express