以直接的方式重定向,这是一种好的做法吗?Express,Node.js

以直接的方式重定向,这是一种好的做法吗?Express,Node.js,node.js,api,rest,express,Node.js,Api,Rest,Express,关于express,我有两个问题。从用户登录页面,我调用下面的API函数 我是否有理由在下面的代码中使用res.send(token),我已经将其注释掉了。测试邮递员需要这个吗 当调用这个函数时,在它之后像return res.redirect('http://127.0.0.1:8081/en/UserSite/profile.html');?或者我需要考虑额外的设置,但现在,我可以保持原样 router.post('/', async (req, res) => { //va

关于express,我有两个问题。从用户登录页面,我调用下面的API函数

  • 我是否有理由在下面的代码中使用
    res.send(token)
    ,我已经将其注释掉了。测试邮递员需要这个吗

  • 当调用这个函数时,在它之后像
    return res.redirect('http://127.0.0.1:8081/en/UserSite/profile.html');?或者我需要考虑额外的设置,但现在,我可以保持原样

     router.post('/', async (req, res) => {
       //validates the request.
       const { error } = validate(req.body); 
     if (error) return res.status(400).send(error.details[0].message);
    
     let user = await User.findOne({email: req.body.email});
     if (!user)  return res.status(400).send('Invalid Email or Password.');
    
     //Here we compare the password for re-hashing the password.
     const validPassword = await bcrypt.compare(req.body.password, user.password);
     if (!validPassword) return res.status(400).send('Invalid Email or Password.');
    
     //const token = jwt.sign({_id: user._id}, config.get('jwtPrivateKey'));
     const token = user.generateAuthToken();
     //res.send(token);
     return res.redirect('http://127.0.0.1:8081/en/UserSite/profile.html');
    
     });
    

  • 您可以为每个http请求发送一个响应,因此您可以使用
    res.send(token)
    res.redirect(
    res.redirect”)http://127.0.0.1:8081/en/UserSite/profile.html');,但不是两者都有,因为它们各自发送一个单独的http响应

    您想要哪个完全取决于您希望此http请求的结果是什么。这不是我们能为你确定的

    我有理由在下面的代码中使用res.send(令牌)吗

    是的,如果您希望http请求返回令牌以便调用者可以使用它

    我已经把它注释掉了。测试邮递员需要这个吗

    同样,这只取决于您希望http请求的结果是什么。这应该与邮递员无关。它与http请求的设计目标以及希望客户端接收的结果有关

    当调用这个函数时,像return res.redirect那样重定向到我想要的站点是一种好的做法吗http://127.0.0.1:8081/en/UserSite/profile.html');? 或者我需要考虑额外的设置,但现在,我可以保持原样

     router.post('/', async (req, res) => {
       //validates the request.
       const { error } = validate(req.body); 
     if (error) return res.status(400).send(error.details[0].message);
    
     let user = await User.findOne({email: req.body.email});
     if (!user)  return res.status(400).send('Invalid Email or Password.');
    
     //Here we compare the password for re-hashing the password.
     const validPassword = await bcrypt.compare(req.body.password, user.password);
     if (!validPassword) return res.status(400).send('Invalid Email or Password.');
    
     //const token = jwt.sign({_id: user._id}, config.get('jwtPrivateKey'));
     const token = user.generateAuthToken();
     //res.send(token);
     return res.redirect('http://127.0.0.1:8081/en/UserSite/profile.html');
    
     });
    
    同样,这取决于此路线的设计目标是什么,而您尚未共享。代码看起来像是在生成一个令牌,而您似乎不需要使用它做任何其他事情,因此如果您不将令牌返回给客户端,我不知道整个路由的意义是什么


    通常,像这样的JWT令牌将用于对RESTAPI的编程访问。对于一般的浏览器访问,您将在cookie中存储某种sessionID,然后您可以在登录后重定向,cookie可以保持有效,以指示这是一个已登录的客户端。为了使JWT令牌本身有用,必须将其返回给客户机,然后客户机必须在将来的http请求中提供该令牌。这是浏览器本身无法用于一般网页浏览的,因此这将用于编程访问(如Ajax调用)。

    因此,如果我理解您的意思,那么通常我会使用
    res.send(token)
    在cookie中使用,这将有助于存储登录用户的会话?这就是我想知道的。非常感谢。我只希望用户登录并存储有关其会话的信息,以便可以在其他html链接中使用。不确定我将如何实现这一点,但这将引导我走上正确的道路。谢谢大家!@雷蒂斯勒贝德夫-不太可能
    res.send(token)
    将令牌传递给客户端,然后客户端可以在后续API调用中呈现该令牌(通常在自定义头中)。浏览器登录会话的cookie是另一种实现,通常不会使用这样的JWT令牌。有关会话实现,请参阅。