J'ai cette épopée redux-observable qui fait une demande POST ajax en utilisant RxJS.ajax.post et je ne pense pas qu'il frappe mon routeur Elixir correctement car rien ne se passe sur mon backend elixir. Je reçois des demandes pour obtenir des catégories correctement et de la même manière, donc je suis correctement sur d'autres chemins dans mon routeur Elixir. Je m'attends à la question d'être avec mon code Elixir backend pas mon frontend. Je pourrais avoir besoin de changer mon chemin en router.ex
.Ajax demande POST ne pas atteindre le chemin du routeur Elixir
Lorsque j'appuie sur un bouton sur le frontend, cet objet est ce qui est envoyé au backend élixir (l'envoie cette action avec un produit comme la charge utile et frappe l'épopée redux observable ci-dessous):
onPress = {() => {
props.uploadProduct({
name: props.name,
brand: props.brand,
description: props.description,
image: props.image
})
l'épopée:
import { ajax } from 'rxjs/observable/dom/ajax'
import { Observable } from 'rxjs'
export const uploadProductEpic = action$ =>
action$.ofType(UPLOAD_PRODUCT)
.mergeMap(action => {
ajax.post('http://localhost:4000/products/', action.payload)
})
.map(response => uploadProductFulfilled(response))
.catch(error => Observable.of(
uploadProductRejected(error))
)
le routeur élixir:
defmodule Api.Router do
use Plug.Router
if Mix.env == :dev do
use Plug.Debugger
end
plug :match
plug :dispatch
get "/categories/" do
Api.Repo.getCategories(conn)
end
post "/products/:product" do
IO.puts inspect conn
Api.Repo.insertProduct(conn, product)
end
end
IO.puts inspect conn
n'enregistre rien. Donc, mon chemin de routeur Elixir post "/products/:product" do
n'est pas touché par ma demande POST. Qu'est-ce que je fais mal?
Ceci est la fonction d'élixir dans repo.ex
que je l'espère insérer le produit dans ma base de données:
def insertProduct(conn, product) do
product = %Api.Product{name: product.name, brand: product.brand, description: product.description, image: product.image, rating: 0, numberOfVotes: 0}
changeset = Api.Product.changeset(product)
errors = changeset.errors
valid = changeset.valid?
case insert(changeset) do
{:ok, product} ->
conn
|> put_resp_content_type("application/json")
|> send_resp(200, Poison.encode!(%{
successs: "success"
}))
{:error, changeset} ->
conn
|> put_resp_content_type("application/json")
|> send_resp(500, Poison.encode!(%{
failure: "Errors"
}))
end
end
Je suis un développeur frontend juste essayer d'entrer dans Elixir Il en est ainsi apprécié toute orientation et de patience. Merci.
Votre code JS est Affectations à '/ products', pas'/produits /: Product'. – Dogbert
Merci. Donc, si je supprime le ': product', à partir du fichier' router.ex', est-ce que j'ai un moyen d'obtenir l'objet produit sur le backend? – BeniaminoBaggins