How to Make a search function using Node Express and MYSQL
Last Updated :
28 Apr, 2025
In this article, we will learn how to create a search function using Node with Express framework to search terms inside MYSQL tables.
Prerequisites:
We will discuss the following methods to search:
Approach to make search function:
We're making a web application using Express.js and connecting it to a MySQL database. When users visit the '/search' route and provide a search term as a parameter, the app looks for that term in the database. If there's an error, we log it and send a 500 error. If not, we send back the search results in JSON format. We're using Node.js with Express for all this.
Steps to Create a Express application:
Step 1: Initialize npm (node package manager) using the following command
npm init
Step 2: Install mysql2 package using the following npm install command.
npm install mysql2
Step 3: Create a new JavaScript file with .js extension (Example: app.js ) and write the code.
Step 4: For testing, create a new database and sample records using the following SQL query. Run the query in the MySQL workspace.
insert sample dataProject Structure:
Project StructureThe updated dependencies in package.json file will look like:
"dependencies": {
"express": "^4.18.2",
"mysql2": "^3.6.5",
}
Step 5: Run the application using following command:
node app.js
Step 6: Navigate to 'http://localhost:3000/search' and pass search term in the query using '?term= <search term>' .
Example: http://localhost:3000/search?term=geeksforgeeks
Note:
Important Note:
Replace host, user, password and database with your actual values.
Example:
const db = mysql.createConnection({
host: 'localhost',
user: 'root',
password: 'root',
database: 'mydatabase',
});
Approach 1: Searching term with partial match:
It performs a partial match on 'name' column using LIKE and % wildcard in SQL query. Search the term with partial match in 'name' column using the following query. The LIKE operator with search term surrounded by % allows for a partial match ( const searchValue = `%${searchTerm}%`; ).
Replace it with following SQL query:
const query = `
SELECT * FROM items
WHERE name LIKE ?
`;
Example: Below is the code example of Searching term with partial match:
JavaScript
const express = require('express');
const mysql = require('mysql2');
const app = express();
const port = 3000;
// MySQL connection
const db =
mysql.createConnection({
host: 'localhost',
user: 'root',
password: 'root',
database: 'mydatabase',
});
// Connect to MySQL
db.connect(err => {
if (err) {
console.error('Error connecting to MySQL:', err);
} else {
console.log('Connected to MySQL');
}
});
// Search endpoint
app.get('/search', (req, res) => {
const searchTerm = req.query.term;
if (!searchTerm) {
return res.status(400)
.json(
{
error: 'Search term is required'
}
);
}
const query = `
SELECT * FROM items
WHERE name LIKE ?
`;
// Use '%' to perform a partial match
const searchValue = `%${searchTerm}%`;
db.query(query, [searchValue, searchValue],
(err, results) => {
if (err) {
console
.error('Error executing search query:', err);
return res.status(500)
.json(
{
error: 'Internal server error'
});
}
res.json(results);
});
});
// Start the server
app.listen(port, () => {
console.log(`Server is running on
http://localhost:${port}`);
});
Output:
match partially in 'name' columnApproach 2: Searching term with exact matching
Search the term with exact match in 'name' column using the following query. The = operator finds the exact match only.
Replace it with following SQL query:
const query = `
SELECT * FROM items
WHERE name = ?
`;
Example: Below is the code example of Searching term with exact matching
JavaScript
const express = require('express');
const mysql = require('mysql2');
const app = express();
const port = 3000;
// MySQL connection
const db = mysql.createConnection({
host: 'localhost',
user: 'root',
password: 'root',
database: 'mydatabase',
});
// Connect to MySQL
db.connect(err => {
if (err) {
console.error('Error connecting to MySQL:', err);
} else {
console.log('Connected to MySQL');
}
});
// Search endpoint
app.get('/search', (req, res) => {
const searchTerm = req.query.term;
if (!searchTerm) {
return res.status(400)
.json(
{
error: 'Search term is required'
});
}
const query = `
SELECT * FROM items
WHERE name = ?
`;
const searchValue = searchTerm;
db.query(query,
[searchValue,
searchValue],
(err, results) => {
if (err) {
console.error('Error executing search query:', err);
return res.status(500)
.json(
{
error: 'Internal server error'
});
}
res.json(results);
});
});
// Start the server
app.listen(port, () => {
console.log(`Server is running
on http://localhost:${port}`);
});
Output:
match exact term in 'name' columnApproach 3: Searching term in multiple columns
It performs a partial match on both 'name' and 'description' columns using the % wildcard. Search the term with partial match in both 'name' and 'description' column using the following query. The LIKE operator with search term surrounded by % allows for a partial match ( const searchValue = `%${searchTerm}%`; ).
Replace it with following SQL query:
const query =
`SELECT *
FROM items
WHERE name LIKE ? OR description LIKE ? `;
Example: Below is the code example of Searching term in multiple columns
JavaScript
const express = require("express");
const mysql = require("mysql2");
const app = express();
const port = 3000;
// MySQL connection
const db = mysql.createConnection({
host: "localhost",
user: "root",
password: "root",
database: "mydatabase",
});
// Connect to MySQL
db.connect((err) => {
if (err) {
console.error("Error connecting to MySQL:", err);
} else {
console.log("Connected to MySQL");
}
});
// Search endpoint
app.get("/search", (req, res) => {
const searchTerm = req.query.term;
if (!searchTerm) {
return res.status(400).json({ error: "Search term is required" });
}
const query = `
SELECT * FROM items
WHERE name LIKE ? OR description LIKE ?
`;
//Use '%' to perform a partial match
const searchValue = `%${searchTerm}%`;
//const searchValue = searchTerm;
db.query(query, [searchValue, searchValue], (err, results) => {
if (err) {
console.error("Error executing search query:", err);
return res.status(500).json({ error: "Internal server error" });
}
res.json(results);
});
});
// Start the server
app.listen(port, () => {
console.log(`Server is running on http://localhost:${port}`);
});
Output:
search in both 'name' and 'description' with partial match
Similar Reads
How to Create and Use Functions in MySQL with NodeJS? We will learn how to create and use functions in MySQL with Node.js. MySQL functions allow encapsulating complex calculations and business logic within the database, which can then be called from Node.js applications. This method is particularly useful for reusing SQL code and maintaining a clean ap
3 min read
How to Implement Search and Filtering in a REST API with Node.js and Express.js ? Search and filtering are very basic features that an API must possess to serve data to the client application efficiently. By handling these operations on the server-side, we can reduce the amount of processing that has to be done on the client application, thereby increasing its performance.In this
5 min read
Node.js MySQL FIND_IN_SET() Function FIND_IN_SET() function is a built-in function in MySQL that is used to get the position of the first occurrence of value string in a list of strings separated by comma(','). Syntax: FIND_IN_SET(value, list_of_string)Parameters: It takes two parameters as follows: value: It is the value to be searche
2 min read
How to use Global functions in Express JS? In this article, we will learn the global function of Express. Express JS is a web application framework for Node JS. This framework runs on the server-side framework. It is a trendy Express JS framework for building scalable web applications. There are many functions available in Express JS that ar
2 min read
Node.js MySQL SUBSTRING() Function SUBSTRING() function is a built-in function in MySQL that is used to get a substring of input string between given range inclusive. Syntax: SUBSTRING(input_string, from, length)Parameters: It takes three parameters as follows: input_string: It is the given string for which the substring will be exec
2 min read
How to insert request body into a MySQL database using Express js If you trying to make an API with MySQL and Express JS to insert some data into the database, your search comes to an end. In this article, you are going to explore - how you can insert the request data into MySQL database with a simple Express JS app.Table of Content What is Express JS?What is MySQ
3 min read
How to do a Full-Text Search in MongoDB using Mongoose In MongoDB, performing a full-text search allows us to query and retrieve documents based on textual content matching certain criteria. When using Mongoose, an ODM (Object Data Modeling) library for MongoDB in Node.js, conducting full-text search operations can be efficiently achieved using the Mong
5 min read
How To Build Node.js Authentication System With MySQL? Node.js is an open-source server-side JavaScript runtime environment established to develop server-side applications. The first task can be an implementation of an authentication system, this is one of the most frequently used processes in web development. In this article, we are going to learn how
4 min read
How to import data from .CSV file into MySQL table using Node.js ? What is .CSV file? The .CSV (Comma Separated Values) files are plain text files that contains a list of data separated by comma(,). It is a format best used for tabular data, row, and columns, exactly like a spreadsheet, just the difference is that the file is in the form of plain text. The idea of
4 min read
How to Build a GraphQL server with NodeJS and Express GraphQL is the open-supply question-based language that is used for querying the data. The main task of GraphQL is to execute the given question return the appropriate facts and represent it to the person. GrapghQL is the advancement of conventional REST API architecture presenting greater features.
2 min read