Express 中的 Session 是什么以及如何在 Node.js 中使用

众所周知,HTTP 是一种无状态协议。 如果用户之前已经到达,我们需要识别请求并将每个请求与用户相关联。 因此,为了跨多个页面持久保存数据,我们使用会话。

特快专场

要在 express 框架中创建会话,请使用 express-session 包。 express-session 模块提供了可以设置和获取会话值的方法和属性。

快速会话在 Node js Web 应用程序中用于维护用户的状态。 要安装 express-session,请在终端或命令行工具中键入 npm install express-session –save 命令。

会话最常用的场景是身份验证系统。 当用户登录到任何系统时,他们可以根据他们的 ID 查看他们的活动。 因此,我们需要将用户的 ID 存储到会话中,然后查询该 ID 以显示有关该用户的不同信息。

我们将以表单验证为例。 我们将通过前端的会话显示验证消息。 那么让我们一步一步开始吧。

步骤 1:创建一个文件夹并安装依赖项。

创建项目文件夹,进入该文件夹,然后点击以下命令。

npm init

它将创建一个 package.json 文件并在其中写入以下代码。

{
  "name": "sessionexpress",
  "version": "1.0.0",
  "description": "Express Sesssion Tutorial",
  "main": "server.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "start": "nodemon server"
  },
  "dependencies": {
    "body-parser": "*",
    "cookie-parser": "*",
    "express": "*",
    "express-hbs": "*",
    "path": "*",
    "express-session": "*",
    "express-validator": "*"
  },
   "devDependencies":{
     "nodemon":"*"
  },
  "keywords": [
    "Express",
    "Node.js",
    "Session"
  ],
  "author": "Krunal Lathiya",
  "license": "ISC"
}

它将安装 Express Web 框架、express-session 和其他软件包。

第 2 步:制作 server.js 文件并启动节点服务器。

在根目录中,创建一个名为 server.js 的文件。

// server.js

const express =  require('express');
const cookeParser =  require('cookie-parser');
const bodyParser =  require('body-parser') ;
const hbs = require('express-hbs');
const expressValidator =  require('express-validator') ;
const session =  require('express-session') ;

const app = express();
const PORT = 3000;

app.get('/', function(req, res){
   res.send('hello');
});

app.listen(PORT, function(){
  console.log('Server is running on',PORT);
});

转到 http://localhost:3000。 您可以看到 Node.js 服务器正在端口:3000 上运行。

下一步是为我们的应用程序设置视图引擎和中间件。 将以下代码添加到 server.js 文件中。

// server.js

app.use(express.static('public'));
app.engine('hbs', hbs.express4({
   partialsDir: __dirname + '/views/partials'
 }));
app.set('view engine', 'hbs');
app.set('views', __dirname + '/views');

app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended: true}));
app.use(cookeParser());

app.use(session({ secret: 'krunal', resave: false, saveUninitialized: true, }));

app.use(expressValidator());

我们还没有创建 views 文件夹,但我们稍后会创建。 我们使用 Express Handlebars 作为模板引擎。 但是,当然,您也可以使用 EJS。 这里我们使用了 body-parser 中间件,也使用了 cookie-parser。

然后使用 express session,它需要一个对象作为参数来初始化它。 然后使用 flash 包显示错误或成功消息。

第 3 步:制作所需的目录。

在根文件夹中,创建一个名为 views 的目录,并在该形状中创建一个名为 add.hbs 的文件。 此外,在 views 文件夹中创建一个名为 partials 的目录。 然后,我们可以定义 header.hbs 和 footer.hbs 文件。

另外,创建一个名为 public 的文件夹并创建一个名为 css 的文件夹并放入 bootstrap.min.css 文件。



  
    Add Info
    
  


  
    
Add User

为我们的应用程序定义路由。

在根目录下创建一个名为 routes 的文件夹,并创建一个名为 user.route.js 的文件。 我们需要在这里为我们的应用程序定义 get 和 post 路由。

// user.route.js

const express = require('express');
const router =  express.Router();

router.get('/', function(req, res){
   res.render('add', { errors: req.session.errors });
   req.session.errors = null;
});

module.exports =  router;

现在,我们需要将此路由导入到 server.js 文件中。

// server.js

const user = require('./routes/user.route');

app.use('/user',user);

转到 http://localhost:3000/user。 你会看到这样的表格。

express session中间件示例教程

第 4 步:服务器端验证。

在 routes >> user.route.js 文件中,粘贴以下代码。 我们刚刚定义了发布路线。

// user.route.js

router.post('/add', function(req, res) {
   let name = req.body.name;
   let email = req.body.email;
 
   req.checkBody('name', 'Name is required').notEmpty();
   req.checkBody('email', 'Email is required').notEmpty();
   req.checkBody('email', 'Please enter a valid email').isEmail();
 
   const errors = req.validationErrors();
   if(errors){
      req.session.errors = errors;
      res.redirect('/user');
   }
   else{
      req.session.success = true;
      res.redirect('/');
   }
   
});

因此,如果有任何错误,它会将它们存储在会话中,并将我们重定向到带有错误的添加视图。

现在,编写 add.hbs 文件以显示错误。


 {{# if errors }}
     {{# each errors }}
          

{{ this.msg }}

{{/each}} {{/if}}

现在,转到 http://localhost:3000/user。 如果您提交的表单没有任何值,它会将值存储在会话中并给我们一个错误。

快速车把教程

所以这就是我们可以使用会话的方式。 我已经把代码放到了 Github 上。 这就是 Express Session 教程。

在 Github 上叉我

资讯来源:由0x资讯编译自APPDIVIDEND,版权归作者Krunal所有,未经许可,不得转载
你可能还喜欢