Добавление нового js-файла в мою лямбда-функцию с использованием Serverless - PullRequest
0 голосов
/ 28 августа 2018

Я пытаюсь создать API на AWS Lambda и использую Serverless Framework для развертывания.

Я полный нуб, поэтому я не уверен, что поступаю правильно. Итак, вот старый любимый, привет мир (index.js):

const serverless = require('serverless-http');
const express = require('express');
const app = express();
const Promise = require('promise');

app.get('/', function (req, res) {
    res.send('Hello World!')
})

Это отлично работает как есть. Но когда я добавлю следующее:

const serverless = require('serverless-http');
const express = require('express')
const app = express()
const Register = require('./controller/registryController');

app.get('/', function (req, res) {
    res.send('Hello World!')
})

app.get('/createUserName', function (req, res) {
    var prom = Register.createUser();
    prom.then((message) => {
        res.status(201).json(message);
    })
    .catch((message) => {
        res.status(400).json(message);
    });
})

module.exports.handler = serverless(app);

Я получаю:

«Не удается найти модуль» ./controller/registryController'"

Что странно, потому что файл прямо там, когда я смотрю в лямбду. Вот его содержание:

const dbConnMysql = require('./dbMngrMysql');

var methods = {
    createUser: function() {
        return new Promise((resolve, reject) => {
            let connection = dbConnMysql.createConnection();
            dbConnMysql.startConnection(connection)
            .then((fulfilled) => {
                let table = 'userNamePool';
                return dbConnMysql.selectFrom(connection, table, null);
            })
            .then((fulfilled) => {
                return dbConnMysql.closeConnection(connection).then(function() {
                    let result = fulfilled;
                    let response = {
                        "statusCode": 200,
                        "headers": {"my_header": "my_value"},
                        "body": JSON.stringify(result),
                        "isBase64Encoded": false
                    };

                    resolve(response);
                });
            })
            .catch((error) => {
                let response = {
                    "statusCode": 404,
                    "headers": {"my_header": "my_value"},
                    "body": JSON.stringify(error),
                    "isBase64Encoded": false
                };

                resolve(response);
            });
        });
    }
};

module.exports = methods;

Вот структура проекта / каталог:

enter image description here

А вот мой serverless.yml для хорошей меры:

сервис: sample-api

provider:
  name: aws
  runtime: nodejs8.10
  stage: dev
  region: yapyap
  deploymentBucket: yadayada
  role: blahblahblah

functions:
  app:
    handler: index.handler
    events:
      - http: ANY /
      - http: 'ANY {proxy+}'
  createUserName:
    handler: index.handler
    events:
      - http: 'GET /createUserName'

Что я делаю не так? Что я могу сделать, чтобы это исправить?

Ответы [ 2 ]

0 голосов
/ 28 августа 2018

Есть опечатка:

controller вместо controllers. ?

0 голосов
/ 28 августа 2018

Извините, я не могу комментировать из-за ограничения репутации.

Возможно, проблема в том, что вы не создали папку controller .

Чтобы создать его правильно создать папку. Назовите его контроллер . Создайте свой registryController.js и вставьте в него свой код. теперь вы сможете назвать его как

const Register = require('./controller/registryController');

Кроме того, если вы хотите использовать архитектуру без сервера, полностью разделите код на стороне сервера и на стороне клиента. Поместите свои HTML-файлы и клиентские скрипты в корзину S3. поместите ваш серверный код в лямбда-функцию и соедините его с API Gateway. затем используйте функцию JavaScript для вызова API. Делайте звонки на стороне сервера как можно меньше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...