Рули «Не удалось найти частичное включение» внутри лямбда-функции

#node.js #express #aws-lambda #handlebars.js

#node.js #экспресс #aws-lambda #handlebars.js

Вопрос:

У меня есть экспресс-приложение, которое я хочу перенести на AWS Lambda. Он использует handlebars в качестве промежуточного программного обеспечения. Я начал с этого руководства: https://dev.to/brightdevs/how-to-convert-an-express-app-to-aws-lambda—44gc

Разница между этим и моим кодом заключается в handlebars. Когда я пытаюсь ПОЛУЧИТЬ / например, я получаю:

Error: /var/task/views/index.hbs: The partial include could not be found
at Object.invokePartial (/var/task/node_modules/handlebars/dist/cjs/handlebars/runtime.js:266:11)
at Object.invokePartialWrapper [as invokePartial] (/var/task/node_modules/handlebars/dist/cjs/handlebars/runtime.js:68:39)
at Object.eval [as main] (eval at createFunctionContext (/var/task/node_modules/handlebars/dist/cjs/handlebars/compiler/javascript-compiler.js:254:23), <anonymous>:8:28)
at main (/var/task/node_modules/handlebars/dist/cjs/handlebars/runtime.js:173:32)
at ret (/var/task/node_modules/handlebars/dist/cjs/handlebars/runtime.js:176:12)
at ret (/var/task/node_modules/handlebars/dist/cjs/handlebars/compiler/compiler.js:525:21)
at /var/task/node_modules/hbs/lib/hbs.js:63:19
at FSReqWrap.readFileAfterClose [as oncomplete] (fs.js:511:3)

Моя структура папок выглядит следующим образом:
/server.js
/views/index.hbs
/views/partials/include.hbs

Соответствующие части server.js:

 const express = require('express'),
    hbs = require('hbs'),
    app = express();

hbs.registerPartials(__dirname  '/views/partials');
app.set('view-engine', 'hbs');

app.get("/", (req, res) => {
    res.render('index.hbs', {});
});

const PORT = process.env.PORT || 8080;

const isInLambda = !!process.env.LAMBDA_TASK_ROOT;
if (isInLambda) {
    const serverlessExpress = require('aws-serverless-express');
    const server = serverlessExpress.createServer(app);
    exports.main = (event, context) => serverlessExpress.proxy(server, event, context)
} else {
    app.listen(PORT, ()=>{
        console.log('Server is up, listening on port '   PORT);
    });
}
  

Я бы ожидал, что index.hbs будет отображаться так, как это происходит, если я запускаю код локально с помощью node.server.js . Вместо этого я получил ошибку «не удалось найти», которую я вставил выше.
Любые подсказки приветствуются.

Ответ №1:

В итоге я решил это, но хотел опубликовать решение, так как я потратил много времени на эту проблему и собрал вопрос вместе.

Что это сделало: требуется «экспресс-handlebars» вместо «hbs». Я не знаю, почему это не сработало с hbs, но я не хочу тратить больше времени на расследование этого.

Я надеюсь, что это может быть кому-то полезно в будущем.