2015-09-11 4 views
1

Permettez-moi de préfixer ceci en disant que je suis plus récent pour Node/Express.Méthode courante d'appel d'une fonction de nœud à partir du contrôleur angulaire

J'ai une application AngularJS qui tire parti Node.JS pour la gestion Azure Blob exigences telles que la création de conteneurs Blob comme suit:

function test(containerName) { 
blobSvc.createContainerIfNotExists(containerName, function (error, result, response) { 
    if (!error) { 
// Container exists and allows 
// anonymous read access to blob 
// content and metadata within this container 
    } 
}); 
}; 

test('blob4'); 

La fonction de création d'un conteneur lorsqu'il est exécuté à partir server.js dans les travaux de noeud comme prévu et crée un conteneur blob. Cependant, j'ai besoin de créer un conteneur blob sur clic dans mon application AngularJS. J'ai envisagé d'utiliser des exports pour accéder et exécuter des fonctions créées dans Server.js mais j'ai vu des informations mélangées, surtout quand Express.js est dans l'image, pour appeler une fonction Node.js via le côté client AngularJS car il semble que dans une application Angular un appel http devrait être fait (s'il vous plaît voir la dernière réponse dans cet article: Call function in nodejs from angular application).

Mes questions sont les suivantes:

1) Depuis mon application utilise actuellement Node, Express et angulaire, aurais-je besoin d'utiliser le http dans mon contrôleur angulaire pour exécuter des fonctions de nœud/faire toutes les fonctions écrites dans le nœud /Server.js nécessite que $ http s'exécute s'il est appelé via le client AngularJS même s'il n'appelle pas un service mais peut être une fonction exécutant quelque chose comme les maths? Exemple d'un appel basé Express:

function MyCtrl($scope, $http) { 
// $http is injected by angular's IOC implementation 

// other functions and controller stuff is here...  

// this is called when button is clicked 
$scope.batchfile = function() { 
    $http.get('/performbatch').success(function() { 
     // url was called successfully, do something 
     // maybe indicate in the UI that the batch file is 
     // executed... 
    }); 
} 
} 

2) ou utilise les exportations, comme énumérées dans ce poste de pratique plus courante, où la fonction est définie comme une exportation, puis importé par un nécessite: What is the purpose of Node.js module.exports and how do you use it?. Si oui, je ferais quelque chose comme ce qui suit ?:

de nœud Fichier:

var myFunc1 = function() { ... }; 
exports.myFunc1 = myFunc1; 

Au sein d'un contrôleur AngularJS (non compris comme une dépendance):

var m = require('pathto/server.js'); 
m.myFunc1(); 

3) Enfin, suis-je complètement hors de base et il y a une pratique courante pour appeler des fonctions de node.js d'un contrôleur angulaire que je manque?

+1

, le nœud est un serveur * * while se poursuit angulaire dans le navigateur. Vous ne pouvez pas inclure un script destiné au noeud dans votre navigateur, car le navigateur ne le sait pas et ne devrait pas le savoir. Vous devrez faire un [itinéraire] (http://expressjs.com/guide/routing.html), le servir, et l'appeler en angulaire. – Jorg

Répondre

6

Tout d'abord nodejs et angularjs tous deux bien que javascript sont deux implémentations différentes.

NodeJS fonctionne sur le serveur, d'autre part angularjs fonctionne sur le navigateur. Au début, quand j'étais newbie au nœud, j'avais aussi le même problème. Je pensais que nous pourrions appeler directement la fonction de nœud de angularjs, après tout, tout est javascript! mais je me trompais ..

Maintenant, voici comment vous devez faire

d'abord créer un itinéraire dans nodejs (son rien, créer un simple restAPI)

app = express(); 

app.get('/dowork',function(res,req){ 
    console.log(req.params.msg); 
    /... code to do your work .../ 
}); 

maintenant AngularJS appel ne fonctionnent

$http.get('http://localhost:8080/dowork',{"msg":"hi"}).success(function(data){ 
console.log(data); 
}); 

Je ne suis pas sûr, il req.params.msg mais vous pouvez vous connecter req et peut trouver l'objet.

En cas de demande de technologie après vos paramètres seront à la fois à l'aide Malgré javascript req.body

+0

Cela commence à effacer certaines choses. Quel est le but des exportations alors? – Kode

+0

Puis-je passer des variables d'Angular au noeud pour l'exécution (par exemple le nom du conteneur Blob comme dans mon exemple?) – Kode

+1

exports fait le travail d'importation de module dans NodeJS, c'est comme créer une fonction nodejs dans un fichier différent et l'importer dans un autre fichier – maddygoround