On this page
How to use Express with Deno
Express is a popular web framework known for being simple and unopinionated with a large ecosystem of middleware.
This How To guide will show you how to create a simple API using Express and Deno.
Initialize a new deno project Jump to heading
In your commandline run the command to create a new starter project, then navigate into the project directory:
deno init my-express-project
cd my-express-project
Install Express Jump to heading
To install Express, we'll use the npm: module specifier. This specifier allows
us to import modules from npm:
deno add npm:express
This will add the latest express package to the imports field in your
deno.json file. Now you can import express in your code with
import express from "express";.
Update main.ts Jump to heading
In the main.ts, let's create a simple server:
import express from "express";
const app = express();
app.get("/", (req, res) => {
res.send("Welcome to the Dinosaur API!");
});
app.listen(8000);
console.log(`Server is running on http://localhost:8000`);
You may notice that your editor is complaining about the req and res
parameters. This is because Deno does not have types for the express module.
To fix this, you can import the Express types file directly from npm. Add the
following comment to the top of your main.ts file:
// @ts-types="npm:@types/express@4.17.15"
This comment tells Deno to use the types from the @types/express package.
Run the server Jump to heading
When you initialized the project, Deno set up a task which will run the main.ts
file, you can see it in the deno.json file. Update the dev task to include
the --allow-net flag:
{
"scripts": {
"dev": "deno run --allow-net main.ts"
},
...
}
This will allow the project to make network requests. You can [read more about permissions flags](/runtime/fundamentals/security/).
Now you can run the server with:
```sh
deno run dev
If you visit localhost:8000 in your browser, you should see:
Welcome to the Dinosaur API!
Add data and routes Jump to heading
The next step here is to add some data. We'll use this Dinosaur data that we found from this article. Feel free to copy it from here.
Create a data.json file in the root of your project, and paste in the dinosaur
data.
Next, we'll import that data into main.ts:
import data from "./data.json" with { type: "json" };
We will create the routes to access that data.
To keep it simple, let's just define GET handlers for /api/ and
/api/:dinosaur. Add the following code after the const app = express();
line:
app.get("/", (req, res) => {
res.send("Welcome to the Dinosaur API!");
});
app.get("/api", (req, res) => {
res.send(data);
});
app.get("/api/:dinosaur", (req, res) => {
if (req?.params?.dinosaur) {
const found = data.find((item) =>
item.name.toLowerCase() === req.params.dinosaur.toLowerCase()
);
if (found) {
res.send(found);
} else {
res.send("No dinosaurs found.");
}
}
});
app.listen(8000);
console.log(`Server is running on http://localhost:8000`);
Let's run the server with deno run dev and check out localhost:8000/api in
your browser. You should see a list of dinosaurs!
[
{
"name": "Aardonyx",
"description": "An early stage in the evolution of sauropods."
},
{
"name": "Abelisaurus",
"description": "\"Abel's lizard\" has been reconstructed from a single skull."
},
{
"name": "Abrictosaurus",
"description": "An early relative of Heterodontosaurus."
},
...
You can also get the details of a specific dinosaur by visiting "/api/dinosaur
name", for example localhost:8000/api/aardonyx will display:
{
"name": "Aardonyx",
"description": "An early stage in the evolution of sauropods."
}
🦕 Now you're all set to use Express with Deno. You could consider expanding this example into a dinosaur web app. Or take a look at Deno's built in HTTP server.