expo-http-server-files
TypeScript icon, indicating that this package has built-in type declarations

0.1.1-6.7 • Public • Published

expo-http-server

npm npm GitHub contributors GitHub Repo stars

A simple HTTP Server Expo module .

Current implementation is for iOS / Android only (React Native).

iOS: Criollo Android: AndroidServer Web: Not implemented

Install

npx expo install @kccd/expo-http-server

Example

import * as server from "expo-http-server";
import { useEffect, useState } from "react";
import { Text, View } from "react-native";

export default function App() {
  const [lastCalled, setLastCalled] = useState<number | undefined>();

  const html = `
	<!DOCTYPE html>
	<html>
		<body style="background-color:powderblue;">
			<h1>expo-http-server</h1>
			<p>You can load HTML!</p>
		</body>
	</html>`;

  const obj = { app: "expo-http-server", desc: "You can load JSON!" };

  useEffect(() => {
    server.setup(9666, (event: server.StatusEvent) => {
      if (event.status === "ERROR") {
        // there was an error...
      } else {
        // server was STARTED, PAUSED, RESUMED or STOPPED
      }
    });
    server.route("/", "GET", async (request) => {
      console.log("Request", "/", "GET", request);
      setLastCalled(Date.now());
      return {
        statusCode: 200,
        headers: {
          "Custom-Header": "Bazinga",
        },
        contentType: "application/json",
        body: JSON.stringify(obj),
      };
    });
    server.route("/html", "GET", async (request) => {
      console.log("Request", "/html", "GET", request);
      setLastCalled(Date.now());
      return {
        statusCode: 200,
        statusDescription: "OK - CUSTOM STATUS",
        contentType: "text/html",
        body: html,
      };
    });
    server.start();
    return () => {
      server.stop();
    };
  }, []);

  return (
    <View
      style={{
        flex: 1,
        backgroundColor: "#fff",
        alignItems: "center",
        justifyContent: "center",
      }}
    >
      <Text>
        {lastCalled === undefined
          ? "Request webserver to change text"
          : "Called at " + new Date(lastCalled).toLocaleString()}
      </Text>
    </View>
  );
}

Running in the background

iOS: When the app is backgrounded the server will inevitably get paused. There is no getting around this. expo-http-server will start a background task that should provide a bit more background time, but this will only be ~25 seconds, which could be lowered by Apple in the future. expo-http-server will automatically pause the server when the time runs out, and resume it when the app is resumed.

Android: The server can be ran continuously in the background using a foreground service, e.g. a persistent notification. Notifee can be used to do this. Take a look at the example project for how to set this up.

Testing

Send a request to the server in a browser browser or curl:

curl http://IP_OF_DEVICE:MY_PORT

For example:

curl http://192.168.1.109:3000

Package Sidebar

Install

npm i expo-http-server-files

Weekly Downloads

8

Version

0.1.1-6.7

License

MIT

Unpacked Size

31.7 kB

Total Files

20

Last publish

Collaborators

  • samf