Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript NodeJs Express会话管理_Javascript_Node.js_Express_Session - Fatal编程技术网

Javascript NodeJs Express会话管理

Javascript NodeJs Express会话管理,javascript,node.js,express,session,Javascript,Node.js,Express,Session,我这里有一个问题,我一直试图在互联网上搜索,甚至在Stackoverflow上搜索,但我没有得到我需要的确切解决方案。我正在创建一些由基本身份验证驱动的应用程序,其中用户需要在登录时登录,我希望sendFile()他们将成为主页,我希望主页上能够检查会话是否已设置,如果未设置,则使用NodeJS、Javascript以及Express重定向到登录 如果是在PHP上,则类似于: session_start(); if(!isset($_SESSION['user_id']) locati

我这里有一个问题,我一直试图在互联网上搜索,甚至在Stackoverflow上搜索,但我没有得到我需要的确切解决方案。我正在创建一些由基本身份验证驱动的应用程序,其中用户需要在登录时登录,我希望
sendFile()
他们将成为主页,我希望主页上能够检查会话是否已设置,如果未设置,则使用NodeJS、Javascript以及Express重定向到登录

如果是在PHP上,则类似于:

session_start();
if(!isset($_SESSION['user_id'])
     location('header: login.php')
<html>
      <?php
         echo "Your user id is: ".user_id;
      ?>
</html>
session_start();
如果(!isset($\u会话['user\u id']))
位置('标题:login.php')

基本上,我希望在会话中设置id,并能够在主页/其他页面中读取id,而不必仅在服务器上读取,也可以在home.html中读取。

您可能不希望使用sendFile,而可能希望使用res.redirect将用户发送到其他端点。例如,此端点可以是您的主页,但我通常最好使用正确的express渲染,而不是sendFile,除非您尝试让用户下载blob文件

您可以设置端点,例如:

const express = require('express');
const app = express();

// setup render system here...

app.use('/', (req, res) => {
    res.render('home');
});
这将调用主模板上的呈现。若要设置模板引擎,可以使用类似或其他呈现引擎。这将允许您在返回HTML之前将值注入HTML,如果您希望添加错误消息,这可能会很有用

配置好后,您可以创建一个名为home.hbs的模板(位置和扩展名取决于您的库和设置)

然后可以使用express session检查会话

app.use('/secured', (req, res) => {
    if (req.session) {
        // We have a session! Now you can validate it to check it's a good session
    } else {
        // No session at all, redirect them to the home screen.
        // You might want to make this the login screen instead.
        res.redirect('/');
    }
});
一些最终的演示代码可能如下所示

const express = require('express');
const app = express();

// Setup express session...
const session = require('express-session');

app.use(session({
  secret: 'keyboard cat',
  resave: false,
  saveUninitialized: true,
  cookie: { secure: true }
}));

// Setup the vie engine...
var hbs = require('express-hbs');

// Use `.hbs` for extensions and find partials in `views/partials`.
app.engine('hbs', hbs.express4({
  partialsDir: __dirname + '/views/partials'
}));
app.set('view engine', 'hbs');
app.set('views', __dirname + '/views');

// Place a file called `views/home.hbs` in the views folder at the top level of your project.
// Fill it with some html, all html is valid, handlebars just adds additional features for you.

// A public route which requires no session
app.use('/', (req, res) => {
    // Renders "views/home.hbs"
    res.render('home');
});

// A secured route that requires a session
app.use('/secured', (req, res) => {
    if (req.session) {
        // We have a session! Now you can validate it to check it's a good session
    } else {
        // No session at all, redirect them to the home screen.
        // You might want to make this the login screen instead.
        res.redirect('/');
    }
});

请注意,我实际上没有运行此代码,因此可能存在一些语法错误等。

您使用passport进行身份验证吗?没有,先生,我只是使用express session,我是从中了解到的。但是现在,我不再只渲染//res.send(“您只有在登录后才能看到此内容”);//我想发送一个文件,例如home.html,并能够读取home.html中的用户名。提前谢谢