...
Each component of the project's structure is designed to support its development, deployment, and documentation, ensuring a streamlined workflow for contributors.
Initial file content
here we are going to give an overview of the file that has been created for the startup project:
src/index.js
the index file
Code Block | ||
---|---|---|
| ||
const express = require("express");
const app = express();
const port = 3000;
app.get("/", (req, res) => {
res.send("Hello World!");
});
const server = app.listen(port, () => {
console.log(`Example app listening at http://localhost:${port}`);
});
module.exports = { app, server }; // Export both app and server |
Overview
This file is a demo that uses the express framework to create route that can be accessible via HTTP
Key Components
- express: The framework used to create the web server.
- app: An instance of Express, used to define middleware, routes, and start the server.
- port: The port number on which the server listens.
- app.get("/"): Defines a route for the root URL that sends back a "Hello World!" response.
- server: The variable that stores the HTTP server instance. It's useful for closing the server during testing or integrating with other services.
Expanding the Application
To build upon this demo, consider adding more routes, middleware for handling various HTTP methods, static files, or even integrating with a database. Express makes it easy to scale applications from simple demos to full-featured web applications.
Conclusion
This demo application provides a basic introduction to creating web servers with Node.js and Express. By understanding how to set up a simple server and respond to HTTP requests, you can begin to explore more complex applications and APIs using Express.
Exporting
The application exports both the app
and server
objects, allowing for easy integration and testing within larger applications or microservices. This practice is beneficial for unit testing or when importing the application as a module in other parts of a project.
test/index.test.js
Code Block | ||
---|---|---|
| ||
const { server } = require("../src/index"); // Adjust the path as necessary
const request = require("supertest");
describe("index.js", function () {
after(function () {
server.close(); // Close the server after tests
});
it("Test echo root path", function (done) {
request(server).get("/").expect(200, done);
});
}); |
Overview
The test uses supertest
, a popular testing library for HTTP assertions, allowing us to test the response of our Express application without starting the server manually. This file contains a single test suite that verifies the server's response to a GET request at the root URL.
Dependencies
- supertest: Used for making HTTP requests and asserting the response in tests.
- server: Imported from the
index.js
file, this is the Express application server we're testing.
Test Suite: index.js
After Hook
- after(): This hook runs after all tests in this suite complete. It's used to close the server, ensuring that the test process exits cleanly without leaving the server running in the background.
Test Cases
- Test echo root path: This test sends a GET request to the root path (
/
) and expects a 200 OK response. If the server responds as expected, the test passes. Thedone
callback is used to handle asynchronous testing, ensuring that the test waits for the server's response before completing.
Initiating Application Development
...