2016-09-23 3 views
0

Android에서 앱을 만들려고하는데 문제가 있습니다. 나는 웹을 수색했으나 확실한 해결책을 찾지 못했다.Node.js Express로 개장 할 때 @Field 매개 변수 추출하기

내 Android 앱에서 Retrofit을 사용하여 로그인 작업에 대한 게시물 요청을 보냅니다.

@FormUrlEncoded 
@POST("/login") 
Call<Boolean> loginUser(@Field("username") String userName, @Field("password") String password); 

내 서버는 명시 적으로 Node.js에 있으며 사용자 이름과 암호 매개 변수를 추출하는 방법을 알지 못합니다.

내 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); 
}); 

을 그리고 내 경로는 로그인에 파일은 다음과 같습니다

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 나에게 @Field 변수를 제공하지 않는 것 , 나는 req.headers 및 req.params뿐만 아니라 성공했다. 누군가 그들을 추출하는 방법을 설명 할 수 있습니까?

은 많은 NodeJs 측면에서

답변

1

감사, 또는 더 나은 : expressjs 응용 프로그램 측, 당신은 body-parser 미들웨어를 사용해야하는 등 https://github.com/expressjs/body-parser

npm install body-parser --save

body-parserURL encoded 입력뿐만 아니라 JSON을 지원하기 때문에 (@Field을 개조 한 경우) 앱에 적절한 미들웨어 기능을 추가해야합니다.

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); 
}); 

또한, 앱에 추가 루트/컨트롤러 전에 body-parser 미들웨어 를 추가 기억. 왜냐하면 파서 미들웨어는 실행되기 전에 입력 요청이 처리되도록 로직을 처리해야하기 때문이다.

var app = express(); 

// first 
app.use(bodyparser.urlencoded({extended: true})); 
app.use(bodyparser.json()); 

// after 
require('./models')(app); 
require('./controllers')(app); 
require('./routes')(app); 
+0

body-parser가 설치되어 있으며 app.js 파일에 포함되어 있습니다. 두 번째 발췌 문장이있는 곳에서도 라우트 파일에 포함시켜야합니까? – Aidin

+0

@Aidin 경로가 정의되기 전에'app'가'bodyParser.urlencoded()'를 사용하고 있습니까? –

+0

제 코드를 더 잘 보여주기 위해 제 질문을 수정했습니다. – Aidin

관련 문제