1

应用程序非常简单。我正在使用带有 postgres 的 rails-api gem 来生成 JSON 数据,使用 Angular 将其调用到前端。我已从控制器中移除 CSRF 保护并将其设置为:null_session。

这是控制器的基本 crud 功能:

    class EngineersController < ApplicationController
    # GET /engineers
    # GET /engineers.json

    def index
      @engineers = Engineer.all

      render json: @engineers
    end

   # GET /engineers/1
   # GET /engineers/1.json

   def show
     @engineer = Engineer.find(params[:id])

     render json: @engineer
   end

  # POST /engineers
  # POST /engineers.json

  def create
     @engineer = Engineer.new(engineer_params)

    if @engineer.save
      render json: @engineer, status: :created, location: @engineer
    else
       render json: @engineer.errors, status: :unprocessable_entity
    end
  end

 # PATCH/PUT /engineers/1
 # PATCH/PUT /engineers/1.json

 def update
    @engineer = Engineer.find(params[:id])

   if @engineer.update(engineer_params)
      head :no_content
   else
     render json: @engineer.errors, status: :unprocessable_entity
   end
 end

 # DELETE /engineers/1
 # DELETE /engineers/1.json

 def destroy
   @engineer = Engineer.find(params[:id])
   @engineer.destroy

   head :no_content
 end

private

  def engineer_params
    params.require(:engineer).permit(:first_name, :last_name)
  end
end

这只是使用 rails api gem 定义的基本 crud 功能,并将视图呈现为带括号的 JSON 对象。

这是应用程序控制器

class ApplicationController < ActionController::Base
 # Prevent CSRF attacks by raising an exception.
 # For APIs, you may want to use :null_session instead.

protect_from_forgery with: :null_session

  def index

  end
end

Index 被定义为允许 Angular 使用 ui-view 渲染页面,因此它是单个实际视图。该功能运行良好,ng-repeat 用于循环访问来自 postgres 的 json,到达 localhost:8080/api/engineers 的端点,并且可以读取、添加和销毁内容。

问题:无法通过邮递员访问 api,这意味着它无法接受来自应用程序外部的 JSON 数据。我想让人们点击 api 并从应用程序外部对其进行更新,或者简单地了解它为什么不起作用。

它与标头 Content-Type application/json 一起发送。

相关服务器日志

Error occurred while parsing request parameters.
Contents:

{first_name: "Samueeeel", last_name: "GRIMMMMES"}

ActionDispatch::ParamsParser::ParseError (795: unexpected token at '{first_name:
 "Samueeeel", last_name: "GRIMMMMES"}'):
4

0 回答 0