簡體   English   中英

如何在Google Cloud Function上運行服務器-使用Node.js

[英]How to run server on Google Cloud Function - with Node.js

我有在本地完美運行的NODE.js代碼(127.0.0.1:CUSTOM_PORT)。 但是現在我想對其進行設置以在Google Cloud Function上運行它。

這是我用來在本地運行代碼的代碼:

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設置正在運行的服務器嗎? 我應該使用哪個端口以及NODE.JS內的URL? 還是我根本不需要使用它,因為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
            }
        }
    })
}

您無法以自己的方式設計它。 Google Cloud Functions具有最大的運行時間,然后該函數終止。 截至今天,該限制為540秒。 雲功能由外部進程調用,雲功能不等待某人連接到它們(例如,他們不聽,他們沒有睡着)。 HTTP觸發器是一個例外,但這不適用於展示網站,但可用於操作。

有些公司使用Cloud Functions,Cloud Datastore和Cloud Storage來運營整個網站。 魔術使用的是API網關產品。 API網關提供客戶訪問的URL www.example.com 然后,API網關調用Cloud Functions來處理請求。 您為無服務器網站上的每個頁面創建到Cloud Functions的相似映射。

許多開發人員使用Google App Engine完成您要完成的工作。 成本極低,非常容易開發。 供您考慮的另一種出色的Google產品是Google Firebase Google還有許多其他非無服務器的產品,例如Compute Engine上的ContainerKubernetes

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM