#javascript #android #express
#javascript #Android #выражать
Вопрос:
Я пытаюсь отправить простой POST-запрос с Android на мой Node.js применение. Я использую Volley для отправки запроса. Вот код со стороны Android.
StringRequest stringRequest=new StringRequest(Request.Method.POST, constants.link,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
Toast.makeText(getApplicationContext(), response, Toast.LENGTH_LONG).show();
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Toast.makeText(getApplicationContext(),error.getMessage(),Toast.LENGTH_LONG).show();
}
})
{
@Override
protected Map<String, String> getParams() throws AuthFailureError {
Map<String,String> params=new HashMap<>();
params.put("number","my-phone-number");
params.put("text","Hello World");
return params;
}
};
RequestQueue requestQueue= Volley.newRequestQueue(menu.this);
requestQueue.add(stringRequest);
Теперь, когда я использую этот код для отправки POST-запроса в веб-API PHP, он работает нормально. Но когда я использую этот код для доступа к конечным точкам моего NODE.js применение. Он действительно отправляет запрос, но не отправляет вместе с ним параметры.
Вот код моего Node.js Применение:
var app=express();
var bodyParser=require('body-parser');
const port = 3001
var telnyx = require('telnyx')(MY_API_KEY);
var count=0;
var access=0;
app.use(bodyParser.json());
app.get("/app",function(req,res,next){
//console.log(req);
console.log(req.query.number);
console.log(req.query.text);
res.send("I am get method" access);
access ;
});
app.post("/app",function(req,res,next){
// console.log(req);
sendSMS(req.query.number,req.query.text);
res.send("I am post method " access " " req.query.number " " req.query.text);
access ;
});
app.listen(port,function(){
console.log("Started on port " port);
});
function sendSMS(num,text) {
console.log("inside function" num " " text);
telnyx.messages.create(
{
'from': ' 15074077011', // Your Telnyx number
'to': ' ' num,
'text': text
},
function (err, response) {
// asynchronously called
// console.log(response);
console.log("message sent " text " " num);
count
}
);
}```
Now when I send a POST request from POSTMAN to this NODE.js application it works fine and I get a message on my Mobile Phone. But when I try to send a post request from android(code is given above), the request sends and the response comes but the parameters stay empty.
1). Is the POST request coming from POSTMAN different from that of Volley from Android
2). How can I send a POST request from Android with parameters that I can catch in my NODE.js application properly?
Ответ №1:
app.use(bodyParser.json());
требуются параметры, отправленные в поле ТЕЛА запроса, а не в качестве URL-параметра.
Вы отправляете запрос что-то вроде «.. / app?number = 123amp;text = message«, вместо этого вам нужно сделать:
JSONObject bodyParams = new JSONObject();
bodyParams.put("number", "1234");
bodyParams.put("text", "message");
JsonObjectRequest jsonRequest = new JsonObjectRequest(Request.Method.POST, url, paramJson,
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
}
});
requestQueue.add(jsonRequest);