我有一个角度应用程序(角度种子应用程序),它应该调用 nodejs(web-server.js)中的一个函数。nodejs 中的函数只是调用一个批处理文件。
2 回答
如果我理解正确,您希望单击客户端(角度应用程序)以在服务器端调用批处理文件。您可以根据您的要求以多种方式执行此操作,但基本上您希望客户端向服务器发送 http 请求(使用 ajax 调用或表单提交)并在将调用批处理文件的服务器上处理它.
客户端
在客户端,您需要有一个使用 angularng-click
指令的按钮:
<button ng-click="batchfile()">Click me!</button>
在您的角度控制器中,您需要使用$http 服务在某个特定 url 上向您的服务器发出 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...
});
}
}
您可以使用浏览器的开发工具(例如Google Chrome 的网络选项卡)或 http 数据包嗅探器(例如fiddler )来验证此 HTTP GET 请求是否发出。
服务器端
编辑:我错误地认为 angular-seed 使用的是 expressjs,但事实并非如此。请参阅basti1302 关于如何设置服务器端“香草风格” node.js 的答案。如果您使用的是快递,您可以在下面继续。
在服务器端,您需要在您的快速应用程序中设置将执行批处理文件调用的 url 。由于我们让上面的客户端发出一个简单的 HTTP GET 请求,/performbatch
我们将这样设置它:
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 答案以获得解决方案:
希望这可以帮助
OP 没有提到 express,所以我将为服务器端(Node.js 部分)提供一个替代方案,而不使用任何额外的框架(这需要通过 npm 安装它)。此解决方案仅使用节点核心:
网络服务器.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 上,我首先会使用这样的批处理文件来测试它:
不管什么.bat:
REM Append a timestamp to out.txt
time /t >> out.txt
对于客户端,没有什么可以添加到Spoike 的解决方案中。