【问题标题】:Express.js - Middleware - not executing next()Express.js - 中间件 - 不执行 next()
【发布时间】:2019-09-30 17:21:52
【问题描述】:

我正在尝试执行一个具有 next(); 的 post 函数。在代码中间,所以我从另一个文件中导出函数的定义并尝试从快速路由器调用它。但它没有执行。

--编辑

我已经尝试了上面建议的常规定义,但是当“next();”时它停止了被调用并返回

Cannot POST /registerUser

index.js


[...]
//Definição e Chamada de Componentes

   const userLogin = require('./userControl/accessControl');
   const userRegister = require('./userControl/registerControl');

[...]

var router = express.Router();              // get an instance of the express Router


//Definição das Rotas
//==============================================================================
router.post('/login', userLogin.login);
router.post('/forgotPassword', userLogin.forgotPassword);
router.post('/registerUser', function(req, res, next) {userRegister.registerUser});


app.use('/', router);

// START THE SERVER
// =============================================================================
app.set('env', 'production');
app.listen(port);
console.log('API Listening on Port ' +port+'');

registerControl.js

exports.registerUser = function(req, res, next) {

    var query = "INSERT INTO [user] (name, email, phone, login, password, enabled, profile) VALUES ('example', 'example@abc.si', 'XXXXXXXXXXXX', 'ADMIN', '12345', 1, 'TEST')


    global.conn.request()
        .query(query)
        .then(result => {
            var userId = result.recordset[0].id;
            console.log(userId);
            if (result.rowsAffected[0] == 0) {
                res.sendStatus(500);
            }
            else {
                req.body.userId = userId;
                next();
               }

        })
        .catch(err => res.json(err));

}, function(req, res) {
    var query = "INSERT INTO [user_company] (company_id, user_id) VALUES ("+req.body.companyId+", "+req.body.userId+");"

    global.conn.request()
    .query(query)
    .then(result => {

        if (result.rowsAffected[0] == 0) {
            res.sendStatus(500);
        }
        else {
            res.sendStatus(200);
        }
    })
    .catch(err => res.json(err));

};

谢谢!

【问题讨论】:

  • 您实际上并没有调用中间件函数。您需要使用传递的参数实际执行函数或隐式传递处理程序。想象一下,如果你做了function(someArgument) { console.log },但log 后面没有括号,它实际上不会执行正确吗?
  • 不明白@AlexanderStaroselsky.. 我该怎么做?

标签: javascript node.js rest express middleware


【解决方案1】:

代替

router.post('/registerUser', function(req, res, next) {userRegister.registerUser});

可以试试

router.post('/registerUser', userRegister.registerUser);

就像你在上面的 forgotPassword 路由中所做的那样。

【讨论】:

  • 如果我这样做,函数运行良好,直到``` req.body.userId = userId;下一个(); ``` 然后它停止并返回“无法 POST / registerUser 给邮递员
  • 我认为问题出在您定义第二个函数firstFn() { ... }, function(req, res) {} 的方式上,而是尝试将第二个函数创建为独立的中间件,并在第一个函数的 else 条件下直接调用该中间件。即else { req.body.userId = userId; newMiddleware(); }
猜你喜欢
  • 2019-06-05
  • 1970-01-01
  • 1970-01-01
  • 2012-02-01
  • 2018-11-28
  • 2013-09-23
  • 1970-01-01
  • 2021-05-21
相关资源
最近更新 更多