1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

wslでelixir その57

Last updated at Posted at 2023-09-14

概要

wsl(wsl2じゃない)で、elixirやってみた。
練習問題、やってみた。

練習問題

Phoenixで、APIを作れ。
xhrで叩け

方針

  • phx.gen.json使う。
  • routerを書く
  • controlerを書く
  • cors対策

手順

  • mix phx.gen.json
$ mix phx.gen.json Urls Url urls link:string title:string
* creating lib/hello2_web/controllers/url_controller.ex
* creating lib/hello2_web/views/url_view.ex
* creating test/hello2_web/controllers/url_controller_test.exs
* creating lib/hello2_web/views/changeset_view.ex
* creating lib/hello2_web/controllers/fallback_controller.ex
* creating lib/hello2/urls/url.ex
* creating priv/repo/migrations/20230913221227_create_urls.exs
* creating lib/hello2/urls.ex
* injecting lib/hello2/urls.ex
* creating test/hello2/urls_test.exs
* injecting test/hello2/urls_test.exs
* creating test/support/fixtures/urls_fixtures.ex
* injecting test/support/fixtures/urls_fixtures.ex

Add the resource to your :api scope in lib/hello2_web/router.ex:

		resources "/urls", UrlController, except: [:new, :edit]


Remember to update your repository by running migrations:

		$ mix ecto.migrate

  • lib/hello2_web/router.ex:修正
		resources "/urls", UrlController, except: [:new, :edit]
  • マイグレーションを実行
$ mix ecto.migrate
warning: the :gettext compiler is no longer required in your mix.exs.

Please find the following line in your mix.exs and remove the :gettext entry:

		compilers: [..., :gettext, ...] ++ Mix.compilers(),

	(gettext 0.23.1) lib/mix/tasks/compile.gettext.ex:5: Mix.Tasks.Compile.Gettext.run/1
	(mix 1.13.4) lib/mix/task.ex:397: anonymous fn/3 in Mix.Task.run_task/3
	(mix 1.13.4) lib/mix/tasks/compile.all.ex:92: Mix.Tasks.Compile.All.run_compiler/2
	(mix 1.13.4) lib/mix/tasks/compile.all.ex:72: Mix.Tasks.Compile.All.compile/4
	(mix 1.13.4) lib/mix/tasks/compile.all.ex:59: Mix.Tasks.Compile.All.with_logger_app/2
	(mix 1.13.4) lib/mix/tasks/compile.all.ex:36: Mix.Tasks.Compile.All.run/1

Compiling 7 files (.ex)
Generated hello2 app

07:17:32.409 [info]	== Running 20230913221227 Hello2.Repo.Migrations.CreateUrls.change/0 forward

07:17:32.423 [info]	create table urls

07:17:32.476 [info]	== Migrated 20230913221227 in 0.0s

  • routes確認
$ mix phx.routes
warning: the :gettext compiler is no longer required in your mix.exs.

Please find the following line in your mix.exs and remove the :gettext entry:

		compilers: [..., :gettext, ...] ++ Mix.compilers(),

	(gettext 0.23.1) lib/mix/tasks/compile.gettext.ex:5: Mix.Tasks.Compile.Gettext.run/1
	(mix 1.13.4) lib/mix/task.ex:397: anonymous fn/3 in Mix.Task.run_task/3
	(mix 1.13.4) lib/mix/tasks/compile.all.ex:92: Mix.Tasks.Compile.All.run_compiler/2
	(mix 1.13.4) lib/mix/tasks/compile.all.ex:72: Mix.Tasks.Compile.All.compile/4
	(mix 1.13.4) lib/mix/tasks/compile.all.ex:59: Mix.Tasks.Compile.All.with_logger_app/2
	(mix 1.13.4) lib/mix/tasks/compile.all.ex:36: Mix.Tasks.Compile.All.run/1

					page_path	GET		 /																			Hello2Web.PageController :index
					page_path	POST		/hello																 Hello2Web.PageController :hello
					page_path	POST		/upload																Hello2Web.PageController :upload
					todo_path	GET		 /todos																 Hello2Web.TodoController :index
					todo_path	GET		 /todos/:id/edit												Hello2Web.TodoController :edit
					todo_path	GET		 /todos/new														 Hello2Web.TodoController :new
					todo_path	GET		 /todos/:id														 Hello2Web.TodoController :show
					todo_path	POST		/todos																 Hello2Web.TodoController :create
					todo_path	PATCH	 /todos/:id														 Hello2Web.TodoController :update
										 PUT		 /todos/:id														 Hello2Web.TodoController :update
					todo_path	DELETE	/todos/:id														 Hello2Web.TodoController :delete
					 url_path	GET		 /api/urls															Hello2Web.UrlController :index
					 url_path	GET		 /api/urls/:id													Hello2Web.UrlController :show
					 url_path	POST		/api/urls															Hello2Web.UrlController :create
					 url_path	PATCH	 /api/urls/:id													Hello2Web.UrlController :update
										 PUT		 /api/urls/:id													Hello2Web.UrlController :update
					 url_path	DELETE	/api/urls/:id													Hello2Web.UrlController :delete
live_dashboard_path	GET		 /dashboard														 Phoenix.LiveDashboard.PageLive :home
live_dashboard_path	GET		 /dashboard/:page											 Phoenix.LiveDashboard.PageLive :page
live_dashboard_path	GET		 /dashboard/:node/:page								 Phoenix.LiveDashboard.PageLive :page
										 *			 /dev/mailbox													 Plug.Swoosh.MailboxPreview []
					websocket	WS			/live/websocket												Phoenix.LiveView.Socket
					 longpoll	GET		 /live/longpoll												 Phoenix.LiveView.Socket
					 longpoll	POST		/live/longpoll												 Phoenix.LiveView.Socket


  • cors対策
mix.exs
	defp deps do
		[
			{:cors_plug, "~> 1.2"}
		]
	end

$ mix deps.get
Resolving Hex dependencies...
Resolution completed in 0.298s
Unchanged:
  castore 1.0.3
  cowboy 2.10.0
  cowboy_telemetry 0.4.0
  cowlib 2.12.1
  db_connection 2.5.0
  decimal 2.1.1
  ecto 3.10.3
  ecto_sql 3.10.2
  esbuild 0.7.1
  expo 0.4.1
  file_system 0.2.10
  floki 0.34.3
  gettext 0.23.1
  jason 1.4.1
  mime 2.0.5
  phoenix 1.6.16
  phoenix_ecto 4.4.2
  phoenix_html 3.3.2
  phoenix_live_dashboard 0.6.5
  phoenix_live_reload 1.4.1
  phoenix_live_view 0.17.14
  phoenix_pubsub 2.1.3
  phoenix_template 1.0.3
  phoenix_view 2.0.2
  plug 1.14.2
  plug_cowboy 2.6.1
  plug_crypto 1.2.5
  postgrex 0.17.3
  ranch 1.8.0
  swoosh 1.11.5
  telemetry 1.2.1
  telemetry_metrics 0.6.1
  telemetry_poller 1.0.0
New:
  cors_plug 1.5.2
* Getting cors_plug (Hex package)
  • endpoint.exに追加
plug CORSPlug

  • options対策
    router.exを修正


  scope "/api", Hello2Web do
    pipe_through :api
    resources "/urls", UrlController, except: [:new, :edit]
	options "/urls", UrlController, :options
	options "/urls/:id", UrlController, :options
  end


成果物

  • xhr

以上。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?