функции firebase, использующие маршруты expressjs, получают параметры неопределенные - PullRequest
0 голосов
/ 28 марта 2020

Я хочу использовать функции firebase для размещения моего expressjs веб-приложения, однако все параметры get кажутся неопределенными. В чем проблема?

    import functions= require("firebase-functions");
    import admin= require("firebase-admin");
    import express= require("express");
    import bodyParser= require("body-parser");
    const app: express.Application = express();
    admin.initializeApp();

    app.get("/getstory", async (req,resp)=>{
        try{
            const preferred_storyid=req.params.preferred_storyid;
            console.log(`preferred_storyid ${preferred_storyid}`) //logs preferred_storyid undefined. Why?
resp.send("ok");
        }catch (e) {
            resp.send(`erequest_story. ${e}`);
        }
    });
    const faststoryapi = functions.https.onRequest(app);
    module.exports={faststoryapi}

Затем код развертывается с помощью

firebase deploy --only functions

и получает запрос, отправленный почтальоном enter image description here

PS: я заметил, что у меня не может быть больше одного маршрута, например, у меня не может быть более одной конечной точки, иначе второй не вызывается. Как вы, ребята, делаете это?

Ответы [ 2 ]

0 голосов
/ 04 апреля 2020

Вы можете сделать что-то вроде этого:

...
app.get(async (req,resp) => { // no need of path
    try{
        const preferred_storyid=req.params.preferred_storyid;
        console.log(`preferred_storyid ${preferred_storyid}`) //logs preferred_storyid undefined. Why?
        resp.send("ok");
    } catch (e) {
        resp.send(`erequest_story. ${e}`);
    }
});

const faststoryapi = functions.https.onRequest(app);
module.exports={faststoryapi}

Теперь вы можете использовать свою функцию, нажав URL: https://us-central1-<project-id>.cloudfunctions.net/faststoryapi. Конечная точка API будет такой же, как имя экспортируемой функции, поэтому вы можете соответствующим образом изменить имя функции.

Если вы используете приложение express в облачной функции, вам нужно использовать req.query для параметров URL.
Также в express req.params используется для таких путей, как эти:

Путь маршрута: / users /: userId / books /: bookId
URL запроса: http://localhost: 3000 / users / 34 / books / 8989
req.params: {"userId": "34", "bookId": "8989"}

Итак, req.query.
См. ответ для получения дополнительной информации

0 голосов
/ 04 апреля 2020

В Firebase Functions req и res объекты совпадают с ExpressJS. Чтобы получить параметры запроса, вы должны использовать req.query.xxxx, а req.params.xxxx можно использовать для доступа к параметрам пути .

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