node-webkit equivalent for sinatra?

2019-06-22 10:23发布

问题:

I've been thinking about learning how to make simple Mac OS X applications based on web-technology and I came across node-webkit which seems compelling. However, I've recently invested in learning the basics of Sinatra/Ruby and I wanted to stay on that course.

Is there a "node-webkit equivalent" for developers who use Sinatra? Or, is there a recommended way to use the Sinatra framework (or Ruby) to build OS X apps that are essentially web wrappers?

回答1:

Sinatra is a server-side framework. Contrary to Node-webkit which is on client side.

If you need to interact with a server, you can still use sinatra (as well as node.js, php, ...) on your server.

But if you are looking for a framework like sinatra on node.js, you should look into Express.js : https://npmjs.org/package/express



回答2:

Node-webkit can use file or http, and which to use depends on your needs. The majority of the time you shouldn't need to, Node-webkit runs completely client-side using only HTML, javascript, and css. You certainly can initialize a local webserver when Node-webkit loads, but first try making a basic "Hello World" application to learn how it works.

If you still think you need to spin up a web server, then the code might look something like this (I'm using Express.js):

// Retrieve libraries...
var expressPort = 6014
var NodeWebkit = require('nw.gui');

// Call focus to application...
NodeWebkit.Window.get().focus();

// Instantiate the Express Server...
var spawn = require("child_process").spawn;
spawn("node", ['./server/server', expressPort]);

// Request director page...
window.location.replace('http://localhost:'+expressPort);

In order to use the Node-webkit features from a page on localhost you will also need to add the following line beneath the root of your package.json:

node-remote": "<local>


Note: While this does work, you must really consider whether it makes sense. In other words, is you application fully self-contained? If nothing will access that content except the application then you don't need it.

For my application I am using Node-webkit as an admin console for creating/managing broadcasts. (hence the local webserver)



回答3:

Nw is not a web framework. Nw does not use a http protocol; it does use a file protocol.

Nw is composed of chromium and nodejs, which allows you to run both DOM and node.js stuff -- without setting up a web server.