我试图向我的节点后端发送带有json参数的请求。这是Android中的功能:
public boolean checkUser(String user, String passw) {
final String url = "http://10.0.2.2:3000/";
final String get = "auth";
JSONObject paramJson = new JSONObject();
try {
paramJson.put("user", "value1");
paramJson.put("pass", "value2");
} catch (JSONException e) {
e.printStackTrace();
}
Log.d("JSON", paramJson.toString());
JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.GET,url + get, paramJson,
response -> {
Toast.makeText(getApplicationContext(),
response.toString(),
Toast.LENGTH_LONG);
},
error -> {
Toast.makeText(getApplicationContext(),
error.toString(),
Toast.LENGTH_LONG);
});
queue.add(jsonObjectRequest);
return false;
}但是,当我试图获取后端的json值时,我得到了一个空体。
app.get("/auth", async (req, res) => {
let user = req.body.user;
let pass = req.body.pass;
console.log(req.body);
if (!user || !pass) {
res.status(500).send("Missing user or pass");
return;
}
...
}因此,基本上我不知道如何访问数据,我尝试记录整个请求,但找不到json字段或值。这里有什么帮助吗?
编辑:
我已经尝试了以下几种方法:
CustomRequest.java
package com.example.apptonia;
import java.io.UnsupportedEncodingException;
import java.util.Map;
import org.json.JSONException;
import org.json.JSONObject;
import com.android.volley.NetworkResponse;
import com.android.volley.ParseError;
import com.android.volley.Request;
import com.android.volley.Response;
import com.android.volley.Response.ErrorListener;
import com.android.volley.Response.Listener;
import com.android.volley.toolbox.HttpHeaderParser;
public class CustomRequest extends Request<JSONObject> {
private Listener<JSONObject> listener;
private Map<String, String> params;
public CustomRequest(String url, Map<String, String> params,
Listener<JSONObject> reponseListener, ErrorListener errorListener) {
super(Method.GET, url, errorListener);
this.listener = reponseListener;
this.params = params;
}
public CustomRequest(int method, String url, Map<String, String> params,
Listener<JSONObject> reponseListener, ErrorListener errorListener) {
super(method, url, errorListener);
this.listener = reponseListener;
this.params = params;
}
protected Map<String, String> getParams()
throws com.android.volley.AuthFailureError {
return params;
};
@Override
protected Response<JSONObject> parseNetworkResponse(NetworkResponse response) {
try {
String jsonString = new String(response.data,
HttpHeaderParser.parseCharset(response.headers));
return Response.success(new JSONObject(jsonString),
HttpHeaderParser.parseCacheHeaders(response));
} catch (UnsupportedEncodingException e) {
return Response.error(new ParseError(e));
} catch (JSONException je) {
return Response.error(new ParseError(je));
}
}
@Override
protected void deliverResponse(JSONObject response) {
// TODO Auto-generated method stub
listener.onResponse(response);
}
}MainActivity.java
公共布尔checkUser(字符串用户,字符串密码){
final String url = "http://10.0.2.2:3000/";
final String get = "auth";
JSONObject paramJson = new JSONObject();
try {
paramJson.put("user", "value1");
paramJson.put("pass", "value2");
} catch (JSONException e) {
e.printStackTrace();
}
Log.d("JSON", paramJson.toString());
Map<String, String> paramMap = new HashMap<String, String>();
paramMap.put("user", "value1");
paramMap.put("pass", "value2");
CustomRequest jsObjRequest =
new CustomRequest(Request.Method.GET, url + get, paramMap,
response -> {
Toast.makeText(getApplicationContext(),
response.toString(),
Toast.LENGTH_LONG);
},
error -> {
Toast.makeText(getApplicationContext(),
error.toString(),
Toast.LENGTH_LONG);
});
queue.add(jsObjRequest);
return false;}
上下文:我正在开发一个带有API的演示项目,该API可以对用户进行身份验证,因此我将发送一个带有参数user/password的get请求。如果有更充分的要求,请告诉我。这对我来说是第一次。
发布于 2022-05-07 05:31:24
发布于 2022-05-10 04:37:17
尝试发送邮递员的post请求,如果您正在从postman获得enpty body,我认为您需要在节点js入口文件中的节点js应用程序中添加body解析器(比如Server.js/app.js)。
var bodyParser = require('body-parser');
var httpApp = express();
httpApp.use(bodyParser.json({
limit: '50mb'
}));
httpApp.use(bodyParser.urlencoded({
extended: true,
limit: '50mb'
}));
var httpServer = httpApp.listen(httpPort, function () {
try {
Logs.WriteLog("Server started on " + httpPort,
null, "ServerLogs");
} catch (e) {}
});在此之后,您将能够在下面的代码中获得主体。
app.get("/auth", async (req, res) => {
let user = req.body.user;
let pass = req.body.pass;
console.log(req.body);
if (!user || !pass) {
res.status(500).send("Missing user or pass");
return;
}
...
}https://stackoverflow.com/questions/72041350
复制相似问题