So, this is an error where I am kinda stuck with nowhere to go. I really donno how to resolve this as the code block looks all good to me.
I am very new to lightning with only 2 days of lightning development experience, so please excuse me for any silly mistakes that I might have commited.

Here goes the **component** code:

    <aura:component implements="flexipage:availableForAllPageTypes,flexipage:availableForRecordHome,force:hasRecordId" access="global" controller="SearchContact">
    <aura:attribute name="searchData" type="List"/>
    
    <!--<lightning:input name="searchText"/>-->
    <ui:inputText label="Enter the Search Text" value="Delete this and enter your keyword here" aura:id="{!v.searchText}" class="slds-input"/>
    <lightning:button variant="brand" label="Search Contact" title="Search Contact" onclick="{!c.searchContact}" />
    
    <lightning:card title="Contacts">
        <p class = "slds-p-horizontal_small">
            <aura:iteration items="{!v.searchData}" var = "contact">
                <lightning:recordviewForm recordId="{!contact.Id}" objectApiName="Contact">
                    <lightning:outputField fieldName="Name"/>
                    <lightning:outputField fieldName="Phone"/>
                    <lightning:outputField fieldName="Email"/>
                </lightning:recordviewForm>
            </aura:iteration>
        </p>
        
    </lightning:card>
</aura:component>


Below is the **Controller**

    ({
	searchContact : function(component, event, helper) {
		helper.fetchContacts(component, event, helper);
	})

**Helper** :

    ({
	fetchContacts : function(component, event, helper) {
        //debugger;
		var action = component.get("c.contactData");
        var searchString = component.get("v.searchText");
        
        //This is setting the value of the search keyword that is used in the apex controller
        action.setParams({
            keyword: searchString
        });
        
        
        action.setCallback(this, function(response){
            var ContactList = response.getReturnValue();
            component.set("v.searchData",ContactList);  
        });
        
    //Global Action
    $A.enqueueAction(action);    
	}
    })

My **Apex code** looks like the below:

    public class SearchContact {
    
    @AuraEnabled
    public static List<Contact> contactData(String keyword){
    	List<Contact> conData = [Select ID, Name, Phone, Email from Contact where FirstName =:keyword];
        return conData;
    }
    }

I created a **lightning App** to get the results of the above component:

    <aura:application extends="force:slds">
    <skmondal:MyContactSearch/>
    </aura:application>