Chris Brown 2021-10-20 18:59 采纳率: 100%
浏览 27
已结题

腾讯云 关于express的Serverless服务报错 INVOKE_FUNCTION_FAILED

在本地编写了express相关的代码,想部署到腾讯云的serverless服务上,单纯用示例的文件不会有问题,但是一导入自己写的数据库的接口就会产生问题,导致无法访问。

img

以下是入口函数,通过app.js文件进行其他组件的引入

// // 返回输入参数
const serverless =  require("serverless-http")

let app = require("./app")

const handler = serverless(app)


module.exports.main = async (event, context) => {
    const res = await handler(event,context)
    //console.log('Hello World keanu reeves')
    return res
}


以下是app.js,和入口函数所在文件为同一级目录

const express = require("express")
const app = express()

const indexRouter = require("./router/index")
const todoRouter = require("./router/todo")

const ser = require("./router/server")
app.use("/",indexRouter)
app.use("/todo",todoRouter)
app.use("/data",ser)

// app.use(express.json())
// app.use(express.urlencoded({extended:false}))  这两行不管注不注释都会报错


module.exports = app

以下是server.js,也就是自己编写的接口文件


const MongoClient = require("mongodb").MongoClient;
const express = require("express");

const app = express();
const url = "mongodb://127.0.0.1:27017";
const client = new MongoClient(url, { useUnifiedTopology: true });
const dbName = "DHU"

async function requireTwinsAll(req, res, next) {
    await client.connect();
    collection = "twins";
    let db = client.db(dbName);
    const data = await db.collection(collection).find({})
    await data.forEach((doc) => {
        console.log(doc);
    })
    res.send("Success,the twins data is shown in the terminal!");
    client.close();
};


async function requireTwinmodelAll(req,res,next) {
    await client.connect();
    collection = "twinmodel";
    let db = client.db(dbName);
    const data = await db.collection(collection).find({})
    await data.forEach((doc) => {
        console.log(doc);
    })
    res.send("Success,the twinmodel data is showed in the terminal!");
    client.close();
}

async function requireTwinsDtid(req, res, next, dtid) {
    await client.connect();
    collection = "twins";
    let db = client.db(dbName);
    await db.collection(collection).aggregate([{ "$unwind": "$twins" }, { "$match": { "twins.@dtId": dtid } }, { "$project": { "twins.@metadata.@model": 1 } }]).toArray((err, data) => {
        console.log(data);
        res.send(data);
    })
}

async function updateEnField(req, res, next,en) {
    await client.connect();
    collection = "twinmodel";
    let db = client.db(dbName);
    await db.collection(collection).updateMany({},{$set:{"displayName.en":en}});
    res.send("Upadated!");

}

app.get('/twins', async(req, res, next) => {
    if (req.query.dtid == undefined)
        requireTwinsAll(req, res, next);
    else {
        var dtid = req.query.dtid;
        requireTwinsDtid(req, res, next, dtid);
    }
})

app.get('/twinmodel', (req, res, next) => {
    if (req.query.en == undefined)
        requireTwinmodelAll(req,res,next);
    else {
        var en = req.query.en;
        updateEnField(req,res,next,en);
    }
})

app.use(express.json())
app.use(express.urlencoded({extended:false}))

module.exports = app

求各位牛人指教!不胜感激!

  • 写回答

0条回答 默认 最新

    报告相同问题?

    问题事件

    • 系统已结题 10月28日
    • 创建了问题 10月20日