Промежуточная посылка обработки запросов экспресс-формы возвращает RangeError - PullRequest
2 голосов
/ 02 мая 2019

У меня есть форма, из которой я должен получить свои данные.Я использую шаблоны ejs.Мой маршрут "/" отображает "основное" представление, и у меня есть промежуточное программное обеспечение для работы с моими данными, поступающими из формы, но оно возвращает ошибку "RangeError: Превышен максимальный размер стека вызовов"

Мой код Express:

const express = require('express');
const app = express();
const path = require('path');
const bodyParser = require('body-parser');
const validator = require('validator.js');

app.set('view engine','ejs');

const urlEncodedParser = app.use(bodyParser.urlencoded({extended:false}));
app.use(bodyParser.json());

app.use(express.static(path.join(__dirname + '/public')));

app.get('/',(req,res)=>{
    res.render('main');
});

app.post('/register', urlEncodedParser, (req,res)=>{
    console.log(req.body);
});

app.listen(3000);

Моя форма:

<form action="/register" method="POST">
        <input type="text" name='name' class="form-control">
        <input type="text" name='surname' class="form-control">
        <input type="number" name='age' class="form-control">
        <input type="email" name='email' class="form-control">
        <input type="password" name='password' class="form-control">
        <input type="password" name='confirm' class="form-control">
        <input type="submit" name="submit" class="btn btn-block btn-success" value="OKAY">
</form>

Полная ошибка, которую я получаю:

RangeError: Maximum call stack size exceeded
    at next (C:\xampp\htdocs\express+mongo\node_modules\express\lib\router\index.js:202:7)
    at Layer.handle [as handle_request] (C:\xampp\htdocs\express+mongo\node_modules\express\lib\router\layer.js:97:5)
    at trim_prefix (C:\xampp\htdocs\express+mongo\node_modules\express\lib\router\index.js:317:13)
    at C:\xampp\htdocs\express+mongo\node_modules\express\lib\router\index.js:284:7
    at Function.process_params (C:\xampp\htdocs\express+mongo\node_modules\express\lib\router\index.js:335:12)
    at next (C:\xampp\htdocs\express+mongo\node_modules\express\lib\router\index.js:275:10)
    at jsonParser (C:\xampp\htdocs\express+mongo\node_modules\body-parser\lib\types\json.js:101:7)
    at Layer.handle [as handle_request] (C:\xampp\htdocs\express+mongo\node_modules\express\lib\router\layer.js:95:5)
    at trim_prefix (C:\xampp\htdocs\express+mongo\node_modules\express\lib\router\index.js:317:13)
    at C:\xampp\htdocs\express+mongo\node_modules\express\lib\router\index.js:284:7

Ответы [ 2 ]

3 голосов
/ 02 мая 2019

Причина вашей проблемы в том, что вы передаете приложение в качестве промежуточного программного обеспечения вашему обработчику запросов. Конкретно здесь:

const urlEncodedParser = app.use(bodyParser.urlencoded({extended:false}));

app.post('/register', urlEncodedParser, (req,res)=>{
    console.log(req.body);
});

urlEncodedParser это просто еще одна ссылка на ваше приложение. Таким образом, вы застряли в бесконечном цикле, где маршрут вызывает urlEncodedParser, который течет вниз к вашему маршруту, который, в свою очередь, вызывает urlEncodedParser и так далее, пока вы не вытолкнете стек.

1 голос
/ 02 мая 2019

urlEncodedParser создает проблему, она не должна быть в промежуточном программном обеспечении:

    const express = require('express');
    const app = express();
    const path = require('path');
    const bodyParser = require('body-parser');
    const validator = require('validator.js');

    app.set('view engine','ejs');

    app.use(bodyParser.urlencoded({extended:false}));
    app.use(bodyParser.json());

    app.use(express.static(path.join(__dirname + '/public')));

    app.get('/',(req,res)=>{
        res.render('main');
    });

    app.post('/register', (req,res)=>{
        console.log(req.body);
    });

    app.listen(3000);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...