** Note: This is an experimental library and needs a bit of love if you'd like to take it to production. **
HTTP Server for React Native
Android only for now.
Built on top of the NanoHttpd library: https://github.com/NanoHttpd/nanohttpd
npm install --save react-native-http-serverreact-native link react-native-http-serverYou need rnpm (npm install -g rnpm)
rnpm link react-native-http-server- in
android/app/build.gradle:
dependencies {
...
compile "com.facebook.react:react-native:+" // From node_modules
+ compile project(':react-native-http-server')
}- in
android/settings.gradle:
...
include ':app'
+ include ':react-native-http-server'+ project(':react-native-http-server').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-http-server/android')- in
MainApplication.java:
+ import com.strainy.RNHttpServer.RNHttpServer;
public class MainApplication extends Application implements ReactApplication {
//......
@Override
protected List<ReactPackage> getPackages() {
return Arrays.<ReactPackage>asList(
+ new RNHttpServer(),
new MainReactPackage()
);
}
......
}- in
MainActivity.java:
+ import com.strainy.RNHttpServer.RNHttpServer;
public class MainActivity extends ReactActivity {
......
@Override
protected List<ReactPackage> getPackages() {
return Arrays.<ReactPackage>asList(
+ new RNHttpServer(),
new MainReactPackage()
);
}
}See CHANGELOG.md
First import/require react-native-http-server:
varhttpServer=require('react-native-http-server');Initalise the server in the componentWillMount lifecycle method. When initalising, you'll provide an options object (only the port property is accepted for now) and a callback where requests will be captured and responses returned.
componentWillMount(){varoptions={port: 1234,// note that 80 is reserved on Android - an exception will be thrown};// initalise the server (now accessible via localhost:1234)httpServer.create(options,function(request,send){// interpret the urlleturl=request.url.split('/');letext=url[1];letdata=JSON.stringify({data: "hello world!",extension: ext});//Build our response object (you can specify status, mime_type (type), data, and response headers)letres={};res.status="OK";res.type="application/json";res.data=data;res.headers={"Access-Control-Allow-Credentials": "true","Access-Control-Allow-Headers": "Authorization, Content-Type, Accept, Origin, User-Agent, Cache-Control, Keep-Alive, If-Modified-Since, If-None-Match","Access-Control-Allow-Methods": "GET, HEAD","Access-Control-Allow-Origin": "*","Access-Control-Expose-Headers": "Content-Type, Cache-Control, ETag, Expires, Last-Modified, Content-Length","Access-Control-Max-Age": "3000","Cache-Control": "max-age=300","Connection": "keep-alive","Content-Encoding": "gzip","Content-Length": data.length.toString(),"Date": (newDate()).toUTCString(),"Last-Modified": (newDate()).toUTCString(),"Server": "Fastly","Vary": "Accept-Encoding"};send(res);});}Finally, ensure that you disable the server when your component is being unmounted.
componentWillUnmount(){httpServer.stop();}