快速会话管理 var express=require('express'); var-app=express(); app.use(express.cookieParser(“键盘123”); app.get('/',函数(req,res){ res.sendfile('./login.html'); }); app.use(express.session()); app.post('/login',函数(req,res){ 控制台日志(请求主体); if(请求会话用户){ req.session.user=req.body.username; }否则{ 请求会话用户=“测试”; } });

快速会话管理 var express=require('express'); var-app=express(); app.use(express.cookieParser(“键盘123”); app.get('/',函数(req,res){ res.sendfile('./login.html'); }); app.use(express.session()); app.post('/login',函数(req,res){ 控制台日志(请求主体); if(请求会话用户){ req.session.user=req.body.username; }否则{ 请求会话用户=“测试”; } });,express,Express,我正在尝试理解和使用express node js。 这里我有一张表格,可以邮寄。 我的理解是: 第一次没有可用的cookie(会话)。 因此,当我们收到请求时:req.session.user将为空。 所以当我们发送200行。将创建此req.session.user cookie并将其存储在本地浏览器中。?随后在所有的req中,这个req.session对象将被发送,对吗 现在的问题是:我总是得到未定义的req.body.username。 我在登录页面中定义了相同的用户名。 我尝试过cons

我正在尝试理解和使用express node js。 这里我有一张表格,可以邮寄。 我的理解是: 第一次没有可用的cookie(会话)。 因此,当我们收到请求时:req.session.user将为空。 所以当我们发送200行。将创建此req.session.user cookie并将其存储在本地浏览器中。?随后在所有的req中,这个req.session对象将被发送,对吗

现在的问题是:我总是得到未定义的req.body.username。 我在登录页面中定义了相同的用户名。 我尝试过console.log(req.body),但它总是未定义的。 如果我没有疗程,身体部分就会起作用


你能澄清我的理解是否正确,以及此代码中的问题是什么吗。我在理解session的概念以及如何在express frame work中使用它时遇到了一些问题

您似乎混淆了请求和响应。如果您发布了一个更大的代码摘录,我们可以提供更详细的帮助,但这里是我对您的误解的看法

  • 当POST/login到达时,您可以检查是否设置了
    req.session.user
    。如果是这样,用户已经登录,但再次登录,这不是常见情况,但您可以执行类似于
    res.send的操作('您已经以'+req.session.user'身份登录)
  • 如果未设置
    req.session.user
    ,则用户正在登录。通常,您会确认用户知道正确的密码,但对于您的小测试应用程序,您只需按照您的
    req.session.user=req.body.username
    进行操作,并以“res.send”(您已以“+req.session.user”的身份登录);比如说

另外,只需确保在应用程序中正确配置了cookieParser、session和bodyParser中间件。

谢谢peter。我更新了完整的代码。我没有任何代码。我正在寻找的是在控制台打印。我没有得到控制台日志(请求主体)的任何打印数据;2) 因此,当我设置了cookie和all时,而不是当我响应req.session.user时,浏览器将自动地将req.session作为cookie并在本地更新它?这是我感到困惑的部分,那是不完整的代码。您的
require
语句在哪里?您是否确实告诉express使用
bodyParser
中间件?我认为你可能会犯一些容易纠正的错误,但由于你不会发布完整的代码示例,我无法帮助你。我添加了完整的代码。这里req.body总是空的..这是第一个问题,这一行:
app.use(express.bodyParser())
这是一个中间件,其工作是为您自动填充
req.body
。您需要真正了解您正在编写的代码的功能。你把每个中间件都弄糊涂了。
bodyParser
的工作是为您解析传入的请求并填充
req.body
session
中间件将为您填充
req.session
,但它不会在cookie中存储会话ID以外的数据。但是,您可以将数据存储在
req.session
对象中,它将对您可用,但实际上只有会话ID被发送到浏览器。
    var express = require('express');
    var app = express();
        app.use(express.cookieParser('keyboard 123'));

app.get('/', function(req, res){
  res.sendfile('./login.html');
});

        app.use(express.session());

            app.post('/login', function(req, res){

            console.log(req.body);
            if (req.session.user) {
                req.session.user=req.body.username;
              } else {
                req.session.user="test";

              }

        });




<form id="myform" action="/login" method="post" enctype="application/x-www-form-urlencoded">
  <input type="text" name="username" id="mytext" />
  <input type="submit" id="mysubmit" />
</form>