Juan Labrador
Juan Labrador

Reputation: 1214

Read parameters via POST with Ruby + Sinatra + MongoDB

I'm creating a simple API with Sinatra + Ruby + MongoDB, working via GET not have problems, but via POST yes... I try to receive params but this come in empty, I don't know if I'm doing thing not good. I am not working with view html, just request and response JSON. I use POSTMAN for pass parameters via POST, but nothing.

Code: app.rb

require 'rubygems'
require 'sinatra'
require 'mongo'
require 'json/ext'
require './config/Database'

require_relative 'routes/Estudiantes'
require_relative 'routes/OtherRoute

Code Estudiantes.rb

# Rest Collection Student
collection = settings.mongo_db['estudiantes']

# Finding

get '/estudiantes/?' do
  content_type :json
  collection.find.to_a.to_json
end

# find a document by its ID
get '/estudiante/:id/?' do
  content_type :json
  collection.find_one(:_id => params[:id].to_i).to_json
end

# Inserting

post '/new_estudiante/?' do
  content_type :json
  student = params    # HERE
  puts 'Parameters: ' + student
  new_id = collection.insert student
  document_by_id(new_id)
end

# Updating

post '/update_name/:id/?' do
  content_type :json
  id = BSON::ObjectId.from_string(params[:id].to_s)
  puts 'ID: ' + params[:id].to_s
  name = params[:name].to_s # HERE
  age = params[:age].to_i # HERE
  puts 'Name and Age: ' + name + age.to_s
  collection.update({:_id => id}, {'$set' => {:name => name, :age => age} })
  document_by_id(id)
end

post '/post/?' do
  puts params[:name].to_json # HERE
end

Thanks

Upvotes: 0

Views: 1187

Answers (1)

Rémi Delhaye
Rémi Delhaye

Reputation: 814

Solution:

You should apply a JSON.parse and then read parameter

code

post '/post/?' do
  params = JSON.parse request.body.read
  puts params['name']
end

Upvotes: 3

Related Questions