javascript - Azure typescript 函数: Unable to determine function entry point

标签 javascript node.js typescript azure azure-functions

项目结构:

<root-directory>
├── README.md
├── dist
├── bin
├── dependencies
├── host.json
├── local.settings.json
├── node_modules
├── package-lock.json
├── package.json
├── sealworker
│   ├── constants
│   ├── errors
│   ├── function.json
│   ├── index.ts
│   ├── interfaces
│   ├── sample.dat
│   ├── services
│   ├── utils
│   └── worker.ts
└── tsconfig.json

函数.json:

{
  "bindings": [
    {
      "authLevel": "function",
      "type": "httpTrigger",
      "direction": "in",
      "name": "req",
      "methods": [
        "get",
        "post"
      ]
    },
    {
      "type": "http",
      "direction": "out",
      "name": "res"
    }
  ],
  "entryPoint": "sealWorkerFunction",
  "scriptFile": "../dist/sealworker/index.js"
}

/sealworker/index.ts:

import { AzureFunction, Context, HttpRequest } from "@azure/functions";
import workerExec from "./worker";

const sealWorkerFunction: AzureFunction = async function (
  context: Context,
  req: HttpRequest
): Promise<void> {
  const responseMessage = "example";
  const result = await workerExec(req, context);

  context.res = {
    // status: 200, /* Defaults to 200 */
    body: responseMessage,
  };
};

export default { sealWorkerFunction };

/sealworker/worker.ts:

import "dotenv/config";
import "reflect-metadata";
import { HttpRequest, Context } from "@azure/functions";

const workerExec = async (req: HttpRequest, context: Context) => {
  context.log("start....");
  const message = req.body;
  context.log("message: ", message);
  return { result: "dummy" };
};

export default workerExec;

错误消息:

Result: Failure Exception: Worker was unable to load function sealworker: 'Unable to determine function entry point: sealWorkerFunction. If multiple functions are exported, you must indicate the entry point, either by naming it 'run' or 'index', or by naming it explicitly via the 'entryPoint' metadata property.' Stack: Error: Worker was unable to load function sealworker: 'Unable to determine function entry point: sealWorkerFunction. If multiple functions are exported, you must indicate the entry point, either by naming it 'run' or 'index', or by naming it explicitly via the 'entryPoint' metadata property.' at /azure-functions-host/workers/node/dist/src/worker-bundle.js:2:14706 at t.LegacyFunctionLoader. (/azure-functions-host/workers/node/dist/src/worker-bundle.js:2:14945) at Generator.next () at o (/azure-functions-host/workers/node/dist/src/worker-bundle.js:2:13387) at process.processTicksAndRejections (node:internal/process/task_queues:95:5)

哦,这是构建后的 dist/sealworker/index.js:

"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
    return new (P || (P = Promise))(function (resolve, reject) {
        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
        function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
        step((generator = generator.apply(thisArg, _arguments || [])).next());
    });
};
var __importDefault = (this && this.__importDefault) || function (mod) {
    return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const worker_1 = __importDefault(require("./worker"));

const sealWorkerFunction = function (context, req) {
    return __awaiter(this, void 0, void 0, function* () {
        const name = req.query.name || (req.body && req.body.name);
        const responseMessage = name
            ? "Hello, " + name + ". This HTTP triggered function executed successfully."
            : "This HTTP triggered function executed successfully. Pass a name in the query string or in the req body for a personalized response.";
        context.log(`Http function processed req for url "${req.url}"`);
        const message = req.body;
        context.log("type of message: ", typeof message);
        context.log("message: ", message);
        const result = yield (0, worker_1.default)(req, context);
        context.res = {
            // status: 200, /* Defaults to 200 */
            body: responseMessage,
        };
    });
};
exports.default = { sealWorkerFunction };
//# sourceMappingURL=index.js.map

我已遵循有关如何正确配置 Azure linux typescript nodejs 函数入口点的文档。但我一定错过了什么。

有什么建议吗?

最佳答案

最初我也遇到了错误,但在我的 index.ts 文件中进行 export {sealWorkerFunction} 修改后,它对我有用.

代码:

index.ts

import { AzureFunction, Context, HttpRequest } from  "@azure/functions";
import  workerExec  from  "./worker";
const  sealWorkerFunction:  AzureFunction  =  async  function (
context:  Context,
req:  HttpRequest
):  Promise<void> {
context.log('HTTP trigger function processed a request.');
const  responseMessage  =  "example";
const  result  =  await  workerExec(req, context);
context.res  = {
// status: 200, /* Defaults to 200 */
body:  responseMessage
};
};
export {sealWorkerFunction};

function.json

{
"bindings": [
{
"authLevel": "function",
"type": "httpTrigger",
"direction": "in",
"name": "req",
"methods": [
"get",
"post"
]
},
{
"type": "http",
"direction": "out",
"name": "res"
}
],
"entryPoint": "sealWorkerFunction",
"scriptFile": "../dist/sealworker/index.js"
}

输出:

enter image description here

提到了这个SO Thread .

关于javascript - Azure typescript 函数: Unable to determine function entry point,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76861141/

相关文章:

javascript - 仅替换捕获组 - 正则表达式

javascript - 使用 Node.js 操作 Mongoose/MongoDB 数组

angular - 复杂的 TypeScript 循环依赖问题

javascript - Typescript - 有没有办法指定全局引用?

typescript - 带有对象字面量和 Typescript 的功能开关盒

javascript - JS-洛达什;嵌套对象(父/子)到平面数组

javascript - .delay() 不能与 SlideUp() 一起使用

javascript - 如何在没有主键或排序键的情况下查询 dynamo db?

node.js - Express 中绝对路径和相对路径的困难

javascript - 限制并发并等到所有 promise 完成,即使有些拒绝