node.js - Express - POST 请求挂起

标签 node.js express

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

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

路由正在运行,因为它调用了我的 Controller ,但正如您在控制台图像中看到的那样,它以未定义的请求转到 Controller ,尽管 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;

表单.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>

路由 login.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);
    });

}

模型 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;
};

控制台:

enter image description here

错误:

enter image description here

enter image description here

最佳答案

您的服务器代码未调用 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 中,您需要使用您的响应/状态代码调用发送。您的客户端将阻塞,直到调用发送或发生超时。

关于node.js - Express - POST 请求挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54385336/

相关文章:

javascript - Bookshelf.js与json属性中的外键的关系

javascript - LoopbackJS 3.x,如何启用删除所有匹配实例

javascript - 无法检索 Express JS 中表单标签发布的文本数据

node.js - nodejs , mongo find 返回无数据

node.js - 在 Raspberry pi 4 上运行 mongodb 服务器

express - 从发布请求重定向到新页面(服务器端)

javascript - Vue.js 可以使用 node-coap 库吗?

node.js - 如何使用 webpack 4 使用 pug 模板引擎成功构建 NodeJS 项目

node.js - electron fluent-ffmpeg mergeToFile() 命令 promise 不会触发

javascript - 如何在 NextJS 应用程序中从 Apollo 链接上下文访问 Express HTTP 请求?