[英]Extracting the @Field parameter from retrofit with Node.js Express
I am trying to make an app in Android and have some problem. 我试图在Android中制作一个应用程序,但遇到了一些问题。 I have searched the web but I haven't found an obvious solution. 我已经在网上搜索过,但是没有找到明显的解决方案。
In my Android app I send a Post request for a login task using Retrofit. 在我的Android应用中,我使用Retrofit发送发布请求以请求登录任务。
@FormUrlEncoded
@POST("/login")
Call<Boolean> loginUser(@Field("username") String userName, @Field("password") String password);
My server is in Node.js with express and I don't know how to extract the username and password parameters. 我的服务器位于带有express的Node.js中,我不知道如何提取用户名和密码参数。
my app.js file looks like this: 我的app.js文件如下所示:
var http = require('http');
var express = require('express');
var bodyparser = require('body-parser');
var connection = require('./dbConnection');
var app = express();
require('./models')(app);
require('./controllers')(app);
require('./routes')(app);
app.use(bodyparser.urlencoded({extended: true}));
app.use(bodyparser.json());
connection.init();
var server = app.listen(3000, function() {
console.log('Server listening on port ' + server.address().port);
});
And my routes file for login looks like this: 我的登录路线文件如下所示:
var loginM = require('../models/login');
var loginC = require('../controllers/login');
module.exports = function(app) {
app.post('/login/', function(req, res, next) {
loginM.attemptLogin(req.body, res);
});
}
req.body does not seem to give me the @Field variables, I have tried req.headers and req.params as well with no success. req.body似乎没有给我@Field变量,我也尝试了req.headers和req.params,但均未成功。 Can someone explain how to extract them? 有人可以解释如何提取它们吗?
Much appreciated 非常感激
On NodeJs side, or better: expressjs
app side, you need to use a body-parser
middleware, such as https://github.com/expressjs/body-parser 在NodeJs端或更好的方面: expressjs
app端,您需要使用body-parser
中间件,例如https://github.com/expressjs/body-parser
npm install body-parser --save
Since body-parser
supports JSON as well as URL encoded input (which retrofit @Field generates) you need to add appropriate middleware functions to app: 由于body-parser
支持JSON以及URL编码的输入( @Field进行了改造),因此您需要向app添加适当的中间件功能:
var bodyParser = require('body-parser');
// parse JSON inputs
app.use(bodyParser.json());
// Also, parse URL encoded inputs
app.use(bodyParser.urlencoded());
// handle requests
app.post('/login/', function(req, res, next) {
loginM.attemptLogin(req.body, res);
});
Also , remember that you add body-parser
middleware Before adding routes/controllers to the app. 另外 ,请记住, 在向应用程序添加路由/控制器之前 ,先添加body-parser
中间件。 Because parser middleware should be executed before so that input is parsed by the time request handling logic is executed. 因为解析器中间件应该在执行之前执行,以便在执行请求处理逻辑时对输入进行解析。
var app = express();
// first
app.use(bodyparser.urlencoded({extended: true}));
app.use(bodyparser.json());
// after
require('./models')(app);
require('./controllers')(app);
require('./routes')(app);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.