簡體   English   中英

NodeJS 404錯誤

[英]NodeJS 404 Error

我正在嘗試創建一個將檢查用戶憑據的中間件,如果成功,則使用用戶信息創建一個JWT。 我想創建一個cookie,然后將JWT存儲在cookie中,但是我似乎無法使其正常工作。 在發布時點擊登錄方法后,我收到404“未找到”錯誤,說它“無法發布/ authenticate”。 我想念什么?

路線:

app.post('/authenticate', function(req, res, next){
    middleware.login(req, res, next);
});

中間件:

exports.login = function(req, res, next){
    var username = req.body.username;
    var password = req.body.password;
    User.findByUsername(username,function(err, user){
        if(err){
            res.send({ success: false, message: 'Authentication failed.' });
        }
        if (!user) {
            res.send({ success: false, message: 'Authentication failed. User not found.' });
        }
        if(user && !user.isuserenabled){
            res.send({ success: false, message: 'Authentication failed. User not found.' });
        }
        if (!UserSchema.comparePassword(password,user.user_password )) {
            res.send({ success: false, message: 'Authentication failed. User not found.' });
        }
        res.cookie('yummyCookie', jwt.sign(
            //payload, secret, options, [callback]
            {
                id: user.user_id,
                email: user.email,
                name: user.firstname + " " + user.lastname,
                role: user.role
            },
            config.secret, // DO NOT KEEP YOUR SECRET IN THE CODE
            {expiresIn: "1h"}, {secure: true, httpOnly: true}));
        return next();
    });
};

收到404 not found的原因是,您實際上沒有發送任何響應,只是將執行傳遞給下一個處理程序。 由於在該Express返回404之后沒有處理程序被匹配app.post實際上被調用,但是當您調用next()它期望另一個中間件來處理請求。 這是一個非常基本的示例,您的路由實際上已被調用,但是執行被傳遞給責任鏈中的下一個中間件。 由於沒有-您會收到錯誤消息。

 var express = require('express'); var app = express(); app.post('/test', (req, res, next) => { console.log('called'); next(); }); app.listen(5000); 

這會將“ called”寫入控制台,但仍返回404。您可以做的是在成功通過身份驗證后添加另一個處理程序,如下所示:

 app.post('/authenticate', (req, res, next) => { res.send('OK').end(); }); 

或者您可以將該登錄名合並到中間件本身中,而不用調用next()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM