Проблема маршрутизации функций Firebase при публикации с использованием данных формы html - PullRequest
0 голосов
/ 18 апреля 2019

Я создаю простое веб-приложение, использующее функции узла js express и cloud firebase

У меня есть 2 конечные точки, 1. первая точка отображает форму (запрос GET) и 2. конечная точка POST, которая принимает данные формыпри отправке

по какой-то причине firebase пропускает имя функции в почтовом URL-адресе (вторая конечная точка) при отправке формы, но работает нормально на локальном экспресс-сервере

пример: если значение атрибута acion формы равно"check" и имя функции firebase - "helloWorld"

URL-адрес отправки формы должен быть "<default firebase pefix>/helloWorld/check", но вместо этого URL-адрес, на который она отправляет сообщение, равен "<default firebase pefix>/check".Имя функции firebase в URL пропускается.что дает мне функцию, не найденную в местоположении us-central и т. д.

Еще одна вещь, которую я заметил, это то, что я даю косую черту в качестве префикса для значения атрибута действия, такого как "action =" \ check ". firebase пропускает всю базовую ссылку идобавив из значения атрибута значение порта

я попытался обойти, установив статический абсолютный путь (путь после производства) к атрибуту действия формы.

Но я хочу, если это ошибка илия что-то упустил

<form action="check" method="POST"   

    <label for="uname"><b>Username</b></label>
    <input type="text" placeholder="Enter Username" name="uname" required>     
    <button type="submit">Login</button> 

</form>

// action = "/ check" это пропускает общую базовую ссылку все вместе

const functions = require('firebase-functions');

const express = require('express')
const bodyparser = require('body-parser')
const app = express()
app.set('port',6000)
app.use(bodyparser.json())
app.use(bodyparser.urlencoded({extended:true}))
app.set('view engine', 'ejs');

app.get('/',(req,res)=>{
  res.render('formfill')
})

 // this below end point is supposed to get triggered on form submission.
// and it is working fine on local express server, but not on firebase functions

app.post('/check',(req,res)=>{

res.send(`you said ${req.body.uname}`)
})

exports.helloWorld = functions.https.onRequest(app);

Ответы [ 2 ]

0 голосов
/ 19 апреля 2019

Я решил это.я не знаю, является ли это моей ошибкой или недостатком знаний.

, поэтому URL-адрес функций firebase выглядит примерно так

https://us-central1-<project-id>.cloudfunctions.net/<functionname>

на локальном сервере firebaseесли я иду к функции URL (префикс localhost) с или без косой черты в конце URL.моя корневая конечная точка поглощается.это нормально.

, но это не относится к производственному URL, для загрузки конечной точки требуется косая черта в конце URL (после имени моей функции).и любой тег привязки href на веб-странице должен опускать косую черту префикса

пример: action = "/check" this is not working but action ="check/" this is working

, поэтому я просто удалил косую черту префикса в своем атрибуте действия и повторно развернут, теперь он работает.

0 голосов
/ 18 апреля 2019

Вы не можете использовать облачные функции для запуска веб-сервера или прослушивания порта. Весь ваш код, который пытается запустить Express, не будет работать. При развертывании функции HTTP ей назначается URL-адрес, и этот URL-адрес используется в качестве конечной точки для запросов.

Вам следует просмотреть документацию для триггеров HTTP , чтобы лучше понять, как это работает.

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