Express - POST 请求挂起

问题描述 投票:0回答:2

我有一个注册用户的表格,但是发布请求不起作用

我已经检查了 bodyparser,consign includes order,在表单中添加了 enctype,但仍然不起作用

路由正在运行,因为它调用了我的控制器,但是正如您在控制台图像中看到的那样,它以未定义的请求转到控制器,尽管 url 参数是在 devtools 中定义的

服务器.js:

const express = require('express'); 
const consign = require('consign');
const bodyParser = require('body-parser');
const expressValidator = require('express-validator');
const helmet = require('helmet');
const jwt = require('jsonwebtoken');
require('dotenv-safe').load();  

const app = express(); 
app.set('view engine', 'ejs');
app.set('views', './app/paginas'); 

app.use(express.static('./app/publico/'));
app.use(bodyParser.urlencoded({extended: true}));
app.use(bodyParser.json());
app.use(expressValidator());

consign(/* {cwd: 'app'} */)
    .include('config/conectarBD.js')
    .then('app/modelos')
    .then('app/controles')
    .then('app/rotas')
    .into(app);


/* consign()
    .include('app/rotas')
    .then('config/conectarBD.js')
    .then('app/modelos')
    .then('app/controles')
    .into(app); */

console.log('Instância do app criada');

module.exports = app;

form.ejs:

<div class="row" id="form_registro">
                <div class="col-sm-6 offset-sm-3 text-center">
                        <form action="/registrar" method="POST">
                        <fieldset>
                            <legend>Registro</legend>
                            <div class="form-group">
                                <label for="form-r-email">Nome:</label>
                                <input type="text" class="form-control" id="nome" name="nome" placeholder="Seu nome">
                            </div>
                            <div class="form-group">
                                <label for="form-r-email">Email:</label>
                                <input type="email" class="form-control" id="email" name="email"
                                    placeholder="Seu email">
                            </div>
                            <div class="form-group">
                                <label for="form-r-senha">Senha:</label>
                                <input type="password" class="form-control" id="senha" name="senha"
                                    placeholder="Sua senha">
                            </div>
                            <!-- TODO implementar -->
                            <div class="form-check">
                                <input type="checkbox" class="form-check-input" id="exampleCheck2">
                                <label class="form-check-label" for="exampleCheck1">Lembre de mim</label>
                            </div>
                            <button type="submit" class="btn btn-success">Registrar</button>
                        </fieldset>
                        <div>
                            Já tem uma conta?
                            <a href="#" id="logar">Registrar!</a>
                        </div>
                    </form>
                </div>
            </div>

路由登录.js:

module.exports = function(application) {
    application.get('/login', function(req, res) {
        console.log('Rota pegaPaginaLogin');
        application.app.controles.login.pegaPaginaLogin(application, req, res);
    });
    application.post('/admin/logar', function(req, res) {
        console.log('Rota /admin/logar');
        application.app.controles.login.logaUsuario(application, req, res);
    });

    application.post('/registrar', function(req, res) {
        console.log('Rota registrar');
        console.log('req.body >>>' + req.body);
        res.status(500).send('testing');
        application.app.controles.login.registraUsuario(application, req, res);
    });
}

controller registraUsuario:

module.exports.registraUsuario = function (application, req, res) {
    console.log('Controller registraUsuario');
    console.log('REQ....' + req)
    var usuario = req.body;

    /** Validação do formulário */
    //TODO validar formatos
    req.assert('nome', 'Nome é obrigatório').notEmpty();
    req.assert('email', 'Email é obrigatório').notEmpty();
    req.assert('senha', 'Senha é obrigatório').notEmpty();

    var errosValidacao = req.validationErrors();

    console.log(errosValidacao);

    if (errosValidacao) {
        res.render('login', {
            validacao: errosValidacao,
            usuario: usuario
        });
        return;
    }

    /** Conexão com banco */
    var conexao = application.config.conectarBD();
    var novoUsuario = new application.app.modelos.UsuariosModel(conexao);

    novoUsuario.getUsuario(usuario, function (error, result) {
        console.log(result);

        novoUsuario.novoUsuario(usuario);
    });

}

model Usuarios型号:

function UsuariosModel(conexao) {
    this._conexao = conexao;
}

/** Se usuário existir, retorna a id_usuario */
UsuariosModel.prototype.getUsuario = function (usuario, callback) {
console.log('Model getUsuario');
this._conexao.query('SELECT id_usuario FROM usuarios WHERE email = "' + usuario.email + ' and senha = "' + usuario.senha + '"');

}

UsuariosModel.prototype.novoUsuario = function (usuario, callback) {
    var hoje = Date.now();
    this._conexao.query('INSERT INTO usuarios SET ?', usuario, callback);
}

module.exports = function () {
    return UsuariosModel;
};

控制台:

错误:

node.js express
2个回答
5
投票

您的服务器代码没有调用

response.send
.

用这个替换你的代码来测试:

application.post('/registrar', function(req, res) {
        console.log('Rota registrar');
        console.log('REQ.query....' + req.params.name);
        res.status(500).send('testing');
        //application.app.controles.login.registraUsuario(application, req, res);
    });

registraUsuario
中,您需要使用您的响应/状态代码调用
send
。您的客户端将阻塞,直到调用发送或发生超时。


0
投票

关闭您的数据库连接我将面临同样的问题一旦您关闭数据库连接问题将得到解决 尝试{ }Catch{ }finally{ Connection.close() }

© www.soinside.com 2019 - 2024. All rights reserved.