2016-01-11 7 views
1

Mon application est prête pour la distribution et j'ai décidé d'utiliser NodeWebkit. Maintenant, le problème est que mon application charge des fichiers locaux et j'ai besoin d'un serveur web pour cela. Comment puis-je regrouper à la fois NodeWebkit et un serveur Web? S'il est impossible d'ajouter un serveur web à NodeWebkit, comment puis-je charger mes fichiers (images, scripts, css) en html? Merci! :)Package NodeWebkit et Web Server

setTimeout(function() { 
var http = require("http"), 
    url = require("url"), 
    path = require("path"), 
    fs = require("fs"), 
    port = process.argv[2] || 8888; 

var server = http.createServer(function(request, response) { 

    var uri = url.parse(request.url).pathname 
    , filename = path.join(process.cwd(), uri); 

    fs.exists(filename, function(exists) { 
    if(!exists) { 
     response.writeHead(404, {"Content-Type": "text/plain"}); 
     response.write("404 Not Found\n"); 
     response.end(); 
     return; 
    } 

    if (fs.statSync(filename).isDirectory()) filename += '/index.html'; 

    fs.readFile(filename, "binary", function(err, file) { 
     if(err) {   
     response.writeHead(500, {"Content-Type": "text/plain"}); 
     response.write(err + "\n"); 
     response.end(); 
     return; 
     } 

     response.writeHead(200); 
     response.write(file, "binary"); 
     response.end(); 
    }); 
    }); 
}).listen(parseInt(port, 10)); 
}, 1000); 

Répondre

1

Node-webkit est une combinaison de node.js et de chrome browser. Si vous voulez avoir votre serveur avec votre application, vous pouvez écrire un serveur dans le nœud.

Départ Noeud principal documentation

Dans votre package.json

{ 
    "name": "nw-demo", 
    "node-main": "index.js", 
    "main": "index.html" 
} 

mode-main est essentiellement un script qui exécute dans node contexte et commence comme l'application démarre.

The script will be running in Node's context which won't be destroyed across page navigation in Webkit, so it can be used to write some 'background' or 'daemon' like code.

Vous pouvez écrire et démarrer votre serveur local http sur 127.0.0.1 et communiquer avec elle. Si vous ne voulez charger que des ressources, vous pouvez les ajouter directement en fournissant des chemins absolus ou relatifs.

Par exemple:

<link rel="stylesheet" type="text/css" href="/bower_components/angular-ui-grid/ui-grid.css"/> 
<script src="/bower_components/jquery/dist/jquery.min.js"></script> 

Utilisez le protocole application

De plus, il y a un protocole app:// prévu dans nw.js que vous pouvez utiliser pour accéder aux fichiers localement. Voir le documentation.

Note:

The root of path refers to the application's directory, which is the directory where the manifest file resides.

+0

Tout d'abord, je vous remercie d'aider! Deuxièmement, mon application ne fonctionne tout simplement pas avec le protocole de l'application, j'ai essayé et ça ne fonctionne pas. Troisièmement, je veux utiliser un serveur web mais chaque fois que j'exécute une commande (n'importe quelle commande) dans node-main, nw.js s'ouvre et se termine. Qu'est-ce qui cause ça? Merci de votre aide! :) – McLinux

+0

Avez-vous essayé le chemin de l'application dans votre manifeste? '" main ":" app: //whatever/index.html ",'. Vous pouvez confirmer que le script node-main doit être indépendant et ne doit pas être référencé dans votre code HTML. nw.js s'ouvre et se termine si l'instruction est invalide ou non prise en charge dans le noeud i.e alert. Même si vous essayez d'accéder à la fenêtre à partir de node-main, nwjs va quitter. – MShoaib91

+0

J'ai essayé le chemin de l'application, mais mon application ne fonctionnera tout simplement pas sans un serveur web et je ne sais pas pourquoi? Aussi, j'ai mis mon code dans ma question ci-dessus, pourriez-vous s'il vous plaît regarder mon code nœud-principal et dites-moi pourquoi c'est l'ouverture et la fermeture? Merci! – McLinux