У меня есть апплет (не наш выбор, это движок MarioAI), который я хотел бы подключить к приложению node.js, использующему Express ... но я не могу заставить mongodb принимать значения, которые я отправляю в моем POST запрос через localhost. Я продолжаю получать 200 ответов от узла, но «неопределенный» от mongooose, что, как я подозреваю, означает, что URLEncoder, который я использую в Java, искажает строку, через которую я посылаю каким-то образом.
Я прочитал это:
Проблема с Java-апплетом для подключения нашего сервера для вызова файла PHP
и попробовал следующий вызов OutputStreamWriter в Java:
//EvaluateFrustration() takes an int but should come back with a float value
String frustrationString = Double.toString(EvaluateFrustration(this.periods));
try {
URL url = new URL("http://127.0.0.1:8888/mario");
final HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setDoOutput(true);
conn.setRequestMethod("POST");
System.out.println(conn.getResponseCode());
conn.setUseCaches (false);
conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
OutputStreamWriter writer;
writer = AccessController
.doPrivileged(new PrivilegedExceptionAction<OutputStreamWriter>() {
public OutputStreamWriter run() throws IOException {
return new OutputStreamWriter(conn.getOutputStream());
}
});
String data = URLEncoder.encode("frustrationValueFirstRound="
+ frustrationString,"UTF-8");
writer.write(data);
writer.flush();
} catch (Exception e) {
}
В приложении узла (используя Express и mongoose / mongodb) я написал:
var express = require('express');
var mongoose = require('mongoose');
var Schema = mongoose.Schema
, ObjectId = Schema.ObjectId;
var ExperimentSchema = new Schema({
experiment : ObjectId
, frustrationValueFirstRound : Number
});
mongoose.connect('mongodb://localhost/mariopaper');
mongoose.model('Experiment', ExperimentSchema);
var Experiment = mongoose.model('Experiment');
app.post('/mario', function(req, res){
var exp = new Experiment();
exp.frustrationValueFirstRound = req.body.frustrationValueFirstRound;
exp.save(function(err){ if (err) { throw err; }
res.send('ok');
});
Для справки, я хотел бы отметить, что этот вызов curl работает просто отлично:
curl -d "frustrationValueFirstRound=99" http://localhost:8888/mario
У кого-нибудь есть идеи, просто написал ли я POST неправильно в Java, или, возможно, я что-то упускаю из-за того, как работает URLEncoder.encode ()?