A simple HTTP server expo module (iOS/Android)
npm install expo-http-server



A simple HTTP Server Expo module .
Current implementation is for iOS / Android only (React Native).
iOS: Criollo
Android: AndroidServer
Web: Not implemented
``shell`
npx expo install expo-http-server
tsx
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();
const html =
You can load 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 (
style={{
flex: 1,
backgroundColor: "#fff",
alignItems: "center",
justifyContent: "center",
}}
>
{lastCalled === undefined
? "Request webserver to change text"
: "Called at " + new Date(lastCalled).toLocaleString()}
);
}
`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:`shell
curl http://IP_OF_DEVICE:MY_PORT
`
For example:
`shell
curl http://192.168.1.109:3000
``