npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

sandgate

v1.2.5

Published

Quickly assemble lightweight apps in Node, with only one additional package.

Downloads

14

Readme

💽 Installation

To install Sandgate, run the code below in a terminal

npm i sandgate

You can start your app once you are finished coding

npm start

or

node server.js

Make sure to require Sandgate in your code

const sandgate = require("sandgate") // Use "sandgate" to refrence later

Latest Update: v1.2.3, CORS, Addon Support, and Request Parameters

📄 Documentation

📋 Table of Contents

🛠️ Constructing a Gate

To begin, you must construct your first gate

const sandgate = require("sandgate");

let gate = new sandgate(); // This is the constructor

Your gate can be created with options. The options are stored as a JSON in the constructor. Here is the format for options

⚙️ Gate Options

{
"404": "./path/to/html"
}

Note that there are currently only 1 variable in options, but there will be more fairly soon. The options can be used like so

let opts = {
"404": "./my/404/page.html"
};

let gate = new sandgate(opts); // Creates a client with our options

👂 Listening for Requests

To listen on a port in Sandgate, you just have to call listen on your gate. The inputs are (port, callback). Listening goes as follows

gate.listen(process.env.PORT); // This could be a number as well

If you are running Node locally on your computer you can see your application whilst its listening by typing localhost:3000 in your browser. Make sure to replace 3000 with whatever port you are using.

🗣️ Callbacks whilst Listening

The format for the listener is just port. The callback grabs the port that the app is listening on and allows you to use it.

You can have your app let you know what port it is serving on. You can use the callback to do this. A callback is like a function inside of a function. Here is a simple listener with a callback.

gate.listen(process.env.PORT, (port) => {
	console.log("My app is on " + port + "!");
	// Port is just a variable provided by the callback function
});

🖥️ Request handling

The most important part of a webserver (depends who you ask) is the request handling. This is how websites interact with the server and how files are served.

There are a few methods, these decide how an HTTP request will act. Some of these methods will give information, files, text, such as GET and HEAD, while others send information and instructions to and from such as POST, PUT, DELETE, and PATCH. (Note that there are more methods in existance)

Currently, Sandgate only supports GET, POST, PUT, and DELETE requests. This will change in the future because Sandgate is quite new.

📥 GET Requests

The GET handler in Sandgate is just the function gate.get(). The first input is the URL path, and the second input is the callback. The callback has two inputs in this order: request to handle the inputs from the request, and response to send data back to the client. So it would look like this

gate.get("/home", (req, res) => {
	console.log("Somebody visited my site at " + req.url + "!");
});

gate.listen(3000);

➡️ POST Requests

The POST handler in Sandgate is similar to that of get. It is just gate.get(). The inputs are the same, and the callback is the same, except for an extra parameter: body. The callback also returns req.body which is the same as body. Here is some code

gate.post("/api/login", (req, res, body) => {
	console.log(body == req.body); // returns 'true'

	res.send("Logged in!")
})

☁️ PUT Requests

Similar to POST and GET the PUT request uses gate.put(). The PUT method is used to update data. Much like POST it uses body and req.body in the callback. Here is a sample

gate.put("/update/file.js", (req, res) => {
	fs.writeFileSync("file.js", req.body)

	res.send("Saved!", 200)
})

❌ DELETE Requests

DELETE and PUT requests are nearly identical. The DELETE method is used to delete data. It again has body in the callback. Here is how it might work

gate.delete("api/removeUser", (req, res) => {
	myDB.user.find(JSON.parse(req.body).id).delete()

	res.send("Deleted user!", 200)
})

➕ Addons

Addons are functions added to the class structure for use in servers. Community addons are currently available! The documentation will come very soon. You can request addons in the issues page of the Sandgate repository.

✔️ Included addons

These addons come included with Sandgate, and are already ready for use in your server. Included addons will be added into this section of the documentation for your use. You can scroll back up to the Table of Contents for easy access to the list of included addons.


🏠 CORS

This addon will allow you to make GET and POST requests across different domains. It is very simple to setup and comes preinstalled with SandGate.

gate.use(sandgate.cors());

gate.listen(3000);

And thats it!

🌠 Public Directories

This addon allows you to use a directory to serve files as opposed to creating many GET listeners. It automatically adds a GET listener to all files in the specified directory. All you have to do is call gate.public(). It would look like as follows

gate.public("./files");

gate.listen(3000);

So if the directory looks like this

app
└── public
      ├── style.css
      └── client.js

If you requested localhost:3000/style.css or localhost:3000/client.js it would send said file. Note that you only need one public per directory.

( ゚ヮ゚) Doesn't look like there are anymore addons... Suggest one!

🚀 Examples

Want to quickly check if you have installed Sandgate correctly? Then just setup quick-listen!

⚡ Quick Listen

Quick-listen is whenever there are no active request handlers, so Sandgate will default to a placeholder HTML file. It is quite easy to setup, the code goes as follows

const sandgate = require("sandgate");
const gate = new sandgate();

gate.listen(3000);

And thats it!

✉️ Sending some Text

Sending text over Sandgate is extremely simple. All you have to do is create a GET listener, and use res.send(). The only input is a text input to be show to the browser. Here is the code

const sandgate = require("sandgate");
const gate = new sandgate();

gate.get("/", (req, res) => {
	res.send("Hello, Sandgate!");
});

gate.listen(3000);

You can use send to create APIs and to send data from your webserver.

📦 Sending HTML

Much like sending text, sending HTML is also fairly easy. This time, we are using res.sendFile(). The only input is a text input that is used for the path of the file. This will read the file and send it along with the correct mime type. Here is some HTML

<!DOCTYPE html>
<html>
	<head>
		<title>Hello, HTML!</title>
		<style>
			body {
				font-family: sans-serif;
			}
		</style>
	</head>
	<body>
		<h1>Hello Sandgate and HTML!</h1>
	</body>
</html>

And we will send it to the client with this code

const sandgate = require("sandgate");
const gate = new sandgate();

gate.get("/", (req, res) => {
	res.sendFile("./index.html");
});

gate.listen(3000);

Which will appear like this!



(Not to scale)

📰 Sending a File

Sending a file is actually the exact same as Sending HTML, Again, we use res.sendFile(). Here is the code

const sandgate = require("sandgate");
const gate = new sandgate();

gate.get("/", (req, res) => {
	res.sendFile("./placeholder.png");
});

gate.listen(3000);

This works with almost any file type because of the fantastic NPM package called mime-types. This will allow the browser to properly display the file!

⚙️ Using Options

As stated previously in Gate Options, you can use options to control how your server works. Here is an example

const sandgate = require("sandgate");

let options = {
	"404": "./404.html"
}

const gate = new sandgate(options);

gate.get("/", (req, res) => {
	res.send("Options! Yeah!");
});

gate.listen(3000);

This will make the server send the 404.html file to the client whenever a page is requested that does not exist. You can see the other options in Gate Options.

🔌 Using Multiple Ports

With Sandgate, you can quickly create and listen on multiple different ports. The setup is much like a normal server, but duplicated.

const sandgate = require("sandgate");

const publicGate = new sandgate();
const secretGate = new sandgate();

publicGate.get("/", (req, res) => {
	res.send("Just a normal webpage :)")
})

secretGate.get("/", (req, res) => {
	res.send("Shhhh... It's a secret!")
})


publicGate.listen(3000);
secretGate.listen(8787);

This is great for creating admin ports and special ports for storing more information.

🗄️ Addon Examples

As stated above in Addons section, Sandgate has addons that you can use in your webserver. This is the section where every addon will have an example.

🌠 Public Directories

This addon automatically creates GET handlers for every file in a specified directory. He is some example code

const sandgate = require("sandgate");
const gate = new sandgate();

gate.public("./pictures")

gate.get("/", (req, res) => {
	res.send("My cool website, with all my cool pictures!");
});

gate.listen(3000);

Easy as that! All your files are available!

( ゚ヮ゚) Doesn't look like there are anymore addons... Suggest one!

License

MIT