我已经设置好了一个gruntfile,这样我就可以开发我的本地angularjs前端,同时将所有api请求转发到在网络上单独托管的java中间层。
这个方法很棒,但是服务器的位置每隔几天就会改变,我不得不不断更新gruntfile以获取最新的服务器位置。
最新的服务器位置可以通过URL缩短服务找到,该服务将其转发到正确的位置,因此我可以使用此grunt任务/node.js代码获取它:
grunt.registerTask('setProxyHost', 'Pings the url shortener to get the latest test server', function() {
request('http://urlshortener/devserver', function(error, response, body) {
if (!error) {
var loc = response.request.uri.href;
if (loc.slice(0, 7) === 'http://') {
proxyHost = loc.slice(7, loc.length - 1);
}
}
});
});
当然,这是异步的,当我运行它时,grunt已经设置了代理,直到请求完成。
如何同步运行此nodejs请求或阻止grunt直到它完成?这仅用于开发,所以可以使用hacky的解决方案。
谢谢
编辑:
Cory提供了很好的答案,基本上解决了问题,因为grunt现在等待任务完成后才继续。最后一个问题是,我无法从initConfig中访问该配置以设置代理,因为initConfig首先运行:
module.exports = function(grunt) {
[...]
grunt.initConfig({
connect: {
proxies: [{
host: grunt.config.get('proxyHost')
这篇帖子(Access Grunt config data within initConfig())概述了问题,但我不确定如何在任务之外同步运行请求?
编辑2 [已解决]:
Cory的答案和这篇文章Programmatically pass arguments to grunt task?解决了我的问题。
module.exports = function(grunt) {
[...]
grunt.initConfig({
connect: {
proxies: [{
host: '<%= proxyHost %>',