从角度应用程序调用nodejs中的函数

时间:2013-08-20 04:37:31

标签: javascript html node.js angularjs request

我有一个角度应用程序(角度种子应用程序),它应该调用nodejs(web-server.js)中的函数。 nodejs中的函数只是调用批处理文件。

2 个答案:

答案 0 :(得分:11)

如果我理解正确,您需要在客户端(角度应用程序)上单击以在服务器端调用批处理文件。您可以根据您的要求以多种方式执行此操作,但基本上您希望客户端向服务器发送http请求(使用ajax调用或表单提交)并在将调用批处理文件的服务器上处理此请求

客户端

在客户端,您需要一个使用angular ng-click指令的按钮:

<button ng-click="batchfile()">Click me!</button>

在角度控制器中,您需要使用$http service在某个特定网址上向服务器发出HTTP GET请求。这个网址取决于你如何设置你的快递应用程序。像这样:

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...
        });
    }

}

您可以使用例如验证此HTTP GET请求。您的浏览器的开发人员工具,例如Google Chrome's network tab或http数据包嗅探器,例如fiddler

服务器侧

编辑:我错误地认为angular-seed正在使用expressjs,但它没有。见basti1302's answer on how to set it up server-side "vanilla style" node.js。如果您使用快递,可以在下面继续。

在服务器端,您需要set up the url in your express app来执行批处理文件调用。由于我们让上面的客户端向/performbatch发出一个简单的HTTP GET请求,我们将以这种方式进行设置:

app.get('/performbatch', function(req, res){
    // is called when /performbatch is requested from any client

    // ... call the function that executes the batch file from your node app
});

以某种方式调用批处理文件,但您可以在此处阅读stackoverflow答案以获得解决方案:

希望这有帮助

答案 1 :(得分:5)

OP没有提到express,所以我将为服务器端(Node.js部分)提供一种替代方案,而不使用任何其他框架(这需要通过npm安装它)。此解决方案仅使用节点核心:

网络-server.js:

'use strict';

var http = require('http')
var spawn = require('child_process').spawn
var url = require('url')

function onRequest(request, response) {
  console.log('received request')
  var path = url.parse(request.url).pathname
  console.log('requested path: ' + path)
  if (path === '/performbatch') {
    // call your already existing function here or start the batch file like this:
    response.statusCode = 200
    response.write('Starting batch file...\n')
    spawn('whatever.bat')
    response.write('Batch file started.')
  } else {
    response.statusCode = 400
    response.write('Could not process your request, sorry.')
  }
  response.end()
}

http.createServer(onRequest).listen(8888)

假设您使用的是Windows,我首先会使用这样的批处理文件来测试它:

<强> whatever.bat:

REM Append a timestamp to out.txt
time /t >> out.txt

对于客户端,没有任何内容可以添加到Spoike's solution