Компилятор Google Closure переехал ?? Это дает ошибку 302 - PullRequest
2 голосов
/ 22 мая 2011

Я использую nodejs 0.4.7, чтобы сделать запрос, это мой код:

var post_data = JSON.stringify({  
    'compilation_level' : 'ADVANCED_OPTIMIZATIONS',  
    'output_format': 'json',
      'warning_level' : 'QUIET',
      'js_code' : code
});

var post_options = {  
    host: 'closure-compiler.appspot.com',  
    port: '80',  
    path: 'compile',  
    method: 'POST',  
    headers: {  
        'Content-Type': 'application/x-www-form-urlencoded',  
        'Content-Length': post_data.length  
    }  
}; 

var post_req = http.request(post_options, function(res) {  
    res.setEncoding('utf8');  
    res.on('data', function (chunk) {  
        console.log('Response: ' + chunk);  
    });  
});

post_req.write(post_data);  
post_req.end();

И я получаю ответ

Response: <HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
<TITLE>302 Moved</TITLE></HEAD><BODY>
<H1>302 Moved</H1>
The document has moved
<A HREF="http://www.google.com/">here</A>.
</BODY></HTML>

Почему это происходит? Что я делаю неправильно ? В учебнике говорится, что я должен сделать запрос POST на http://closure -compiler.appspot.com / compile ...

1 Ответ

5 голосов
/ 22 мая 2011

Вы пытаетесь отправить данные json:

var post_data = JSON.stringify({  
    'compilation_level' : 'ADVANCED_OPTIMIZATIONS',  
    'output_format': 'json',
      'warning_level' : 'QUIET',
      'js_code' : code
});

API компилятора Google Closure требует стандартных данных формы, поэтому вы хотите использовать вместо него querystring.Также вам нужно указать желаемый формат вывода (скомпилированный код, который я предполагаю), как указано в их документации :

var post_data = querystring.stringify({  
    'compilation_level' : 'ADVANCED_OPTIMIZATIONS',  
    'output_format': 'json',
    'output_info': 'compiled_code',
      'warning_level' : 'QUIET',
      'js_code' : code
});

Путь лучше объявить так:

path: '/compile', 

Вот полное доказательство кода концепции:

var http = require('http');
var querystring = require('querystring');

var code ="// ADD YOUR CODE HERE\n" +
"function hello(name) {\n" +
" alert('Hello, ' + name);\n" +
"}\n" +
"hello('New user');\n";

var post_data = querystring.stringify({  
    'compilation_level' : 'ADVANCED_OPTIMIZATIONS',  
    'output_format': 'json',
    'output_info': 'compiled_code',
      'warning_level' : 'QUIET',
      'js_code' : code
});

var post_options = {  
    host: 'closure-compiler.appspot.com',  
    port: '80',  
    path: '/compile',  
    method: 'POST',  
    headers: {  
        'Content-Type': 'application/x-www-form-urlencoded',  
        'Content-Length': post_data.length  
    }  
}; 

var post_req = http.request(post_options, function(res) {  
    res.setEncoding('utf8');  
    res.on('data', function (chunk) {  
        console.log('Response: ' + chunk);  
    });  
});

post_req.write(post_data);  
post_req.end();

Запуск с node.js приводит к следующему:

$ node test.js 
Response: {"compiledCode":"alert(\"Hello, New user\");"}
...