Как запустить сервер в облачной функции Google - с Node.js - PullRequest
0 голосов
/ 14 декабря 2018

У меня есть код NODE.js, который отлично работает локально (127.0.0.1:CUSTOM_PORT).Но теперь я хотел бы настроить его для запуска в облачной функции Google.

Это код, который я использую для локального запуска кода:

function connect_to_server() {
    const PORT = process.env.PORT || 8080;
    app.listen(PORT,'127.0.0.1',function () {
        console.log('---> SERVER IS RUNNNG <---')
    })
}

Кто-то знаетспособ установить работающий сервер с Google Cloud Functions?Какой порт я должен использовать и URL ВНУТРИ NODE.JS ??Или мне вообще не нужно его использовать, поскольку GCF уже изначально настроил для меня сервер?

GCF Укажите URL-адрес триггера, который можно нажать, но он все равно не работает.

Полныйфункция без app.listen()

// CONFIGURATION
const express = require('express')
const app = express()
const config = require('./config')
const bodyParser = require('body-parser')
const moment = require('moment')
const sql = require("mssql")
const jwt = require('jwt-simple')
const compression = require('compression')


function token(token) {
    var secret = Buffer.from('xxx', 'hex')
    return jwt.decode(token, secret)
}

function sql_puller(res, req) {
    sql.connect(config, function (err) {
        if (err) {
            console.log(err)
            res.send(err.code)
        }

        const request = new sql.PreparedStatement()

        const {
            x
        } = req.body

        let newProps = {}

        x.forEach(filters => {
            newProps[filters.x] = filters.x
        })

        const isValidInput = validateInput(x, x, x, res)

        if (!isValidInput) {
            return
        }

        request.input('1', sql.VarChar(1))
        request.input('2', sql.VarChar(1))
        request.input('3', sql.VarChar(1))

        sqlQuery = `XXXXXX`

        request.prepare(sqlQuery, err => {
            if (err) {
                console.log(err)
                res.send(err.code)
                return
            }
            request.execute({
                iso: x,
                start: x,
                end: x
            }, (err, recordset) => {
                request.unprepare(err => {
                    if (err) {
                        console.log(err)
                        res.send(err.code)
                        return
                    }
                })
                if (err) {
                    console.log(err)
                    res.send(err.code)
                    return
                }

                res.json(recordset)
                sql.close()
            })
        })
    })



    sql.on('close', function (err) {
        console.log('SQL Connection Closed.', err)
    })

    sql.on('error', function (err) {
        sql.close()
        console.log('SQL error occurred.', err)
    })
}


exports.main = function main() {
    app.use(compression())
    app.use(bodyParser.json())
    app.post('/', function (req, res) {

        try {

            res.setHeader('Cache-Control', 'public, max-age=3600')
            var decodedToken = token(req.body['Token'])
            console.log(req.body)
            console.log('Successefully connected - token accepted')
            // connect to your databas

            if (decodedToken == "XXXXXX") {
                sql_puller(res, req)
            } else {
                console.log('Incorrect Token')
            }

        } catch (err) {
            if (err) {
                console.log(err)
                res.send('Invalid Token')
                return
            }
        }
    })
}

1 Ответ

0 голосов
/ 14 декабря 2018

Вы не можете так, как вы это спроектировали.Облачные функции Google имеют максимальное время выполнения, после чего функция отключается.На сегодняшний день этот предел составляет 540 секунд.Облачные функции вызываются внешним процессом, облачные функции не ждут, пока кто-то к ним подключится (например, они не слушают, они не спят).Исключением является HTTP Trigger, но его нельзя использовать для представления веб-сайта, но его можно использовать для действий.

Есть компании, которые управляют всем своим веб-сайтом, используя функции Cloud, Cloud Datastore и Cloud Storage.Волшебство заключается в использовании продукта шлюза API.Шлюз API предоставляет URL-адрес www.example.com , по которому клиенты переходят.Затем шлюз API вызывает облачные функции для обработки запроса.Вы создаете сопоставления для каждой страницы на своем веб-сайте, аналогичном облачным функциям.

Многие разработчики используют Google App Engine , чтобы выполнить то, что вы пытаетесь сделать.Очень низкая стоимость и очень прост в разработке.Еще один отличный продукт Google для вас, чтобы рассмотреть это Google Firebase .У Google есть много других продуктов, которые не являются серверными, такие как Контейнеры на Compute Engine и Kubernetes .

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