【发布时间】:2017-10-21 13:45:38
【问题描述】:
我有这个 redux-observable 史诗,它使用RxJS.ajax.post 执行 POST ajax 请求,我认为它没有正确地访问我的 Elixir 路由器,因为我的 Elixir 后端没有发生任何事情。我正在获取请求以正确并以相同的方式获取类别,因此我正确地访问了 Elixir 路由器中的其他路径。我预计问题出在我的后端 Elixir 代码而不是我的前端。我可能需要更改router.ex 中的路径。
当我在前端按下一个按钮时,这个对象会被发送到 elixir 后端(它以一个产品作为有效负载来调度这个动作,并点击下面的 redux-observable 史诗):
onPress = {() => {
props.uploadProduct({
name: props.name,
brand: props.brand,
description: props.description,
image: props.image
})
史诗:
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))
)
长生不老药路由器:
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 不记录任何内容。所以我的 Elixir 路由器路径 post "/products/:product" do 没有被我的 POST 请求击中。我做错了什么?
这是repo.ex 中的长生不老药功能,我希望将产品插入我的数据库:
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
我是一名前端开发人员,只是想进入 Elixir,因此感谢任何指导和耐心。谢谢。
【问题讨论】:
-
您的 JS 代码正在 POST 到
/products,而不是/products/:product。 -
谢谢。所以如果我从
router.ex文件中删除:product,我有办法在后端获取产品对象吗?
标签: react-native ecto elixir elixir-poison