繁体   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