2017-01-04 4 views
0

У меня простая форма для входа в систему, проблема в том, когда я нажимаю «Отправить», request.body на стороне сервера пуст. Я видел, что bodyParser является фундаментальной частью, но в моем дело объявлено перед маршрутами, поэтому я думаю, что проблема другая. это мой сервер страниц App.jsExpress.js request.body не работает

var favicon = require('serve-favicon'); 
var logger = require('morgan'); 
var cookieParser = require('cookie-parser'); 
var bodyParser = require('body-parser'); 

var index = require('./routes/index'); 
var users = require('./routes/users'); 

var app = express(); 

// view engine setup 
app.set('views', path.join(__dirname, 'views')); 
app.set('view engine', 'jade'); 

// uncomment after placing your favicon in /public 
//app.use(favicon(path.join(__dirname, 'public', 'favicon.ico'))); 
app.use(logger('dev')); 
app.use(bodyParser.json()); 
app.use(bodyParser.urlencoded({ extended: true })); 
app.use(cookieParser()); 
app.use(express.static(path.join(__dirname, 'public'))); 

app.use('/', index); 
app.use('/users', users); 

// catch 404 and forward to error handler 
app.use(function(req, res, next) { 
var err = new Error('Not Found'); 
err.status = 404; 
next(err); 
}); 

// error handler 
app.use(function(err, req, res, next) { 
// set locals, only providing error in development 
res.locals.message = err.message; 
res.locals.error = req.app.get('env') === 'development' ? err : {}; 

// render the error page 
res.status(err.status || 500); 
res.render('error'); 
}); 
app.listen(3000); 
module.exports = app; 

это index.js

var express = require('express'); 
var router = express.Router(); 


function Login(req, res){ 
var mongoClient = require('mongodb').MongoClient; 
mongoClient.connect('mongodb://localhost:27017/squaredDB', function(err, db) { 
if(err) throw err; 
    db.collection('users').find({email: req.body.email}, function(err, data){ 
    console.log(req.body); 
    }); 
}); 
} 


/* GET home page. */ 
router.get('/', function(req, res, next) { 
    res.render('index', { title: 'Express' }); 
}); 

router.post('/', function(req, res, next) { 
    Login(req, res); 
    res.render('app-home', { title: '' }); 
}); 

module.exports = router; 

это мой нефритовый шаблон формы:

form(method="post" action="/") 
    label Email 
    input(type="text" placeholder="Email") 
    label Password 
    input(type="password" placeholder="Password") 
    input(type="submit" value="login") 
+1

Я не использовал нефрит, но с другими шаблонами, форма элементы должны иметь имя, чтобы вы могли выполнить команду 'req.body ['fieldName']'. Вы пробовали это? –

ответ

2

Вы упускаете name атрибуты для ваших полей ввода в вашем шаблоне. Без них браузер не представит их в форме.

+0

Я пытаюсь понять, почему я не использовал имена ... в любом случае большое спасибо – PazzoTotale

1

Добавить имя атрибута для вашего поля ввода теперь будет иметь возможность доступа к полю по запросу как req.body.name

<form action="/", method="POST"> 
    <input type="text" placeholder="name" name="name"> 
    <button type="submit">Submit</button> 
</form> 
Смежные вопросы