使用快速会话在不同路径上共享信息

问题描述 投票:0回答:1

我想知道是否有人可以帮助我。我有一个包含dialogflow(Google的chatbot平台)的react应用。我想使用Express-Session在用户路径中的信息中共享信息到一个dialogflowimplementationRoute。这是我的主要server.js文件。在server.js中,我声明了一个快速会话

server.js

const express = require('express');
const mongoose = require('mongoose');
const bodyParser = require('body-parser');
const passport = require('passport');
const path = require('path');
var cors = require('cors')

const users = require('./routes/api/users');


const db = require('./config/keys').mongoURI;

require('./models/Users');



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

// Body parser middleware
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());
app.use(cors());


require('./routes/fulfillmentRoutes')(app);


app.use(session({secret: 'ssshhhhh'}));

// Connect to MongoDB
mongoose
  .connect(db)
  .then(() => console.log('MongoDB Connected'))
  .catch(err => console.log(err));

// Passport middleware
app.use(passport.initialize());

// Passport Config
require('./config/passport')(passport);

// Use Routes
app.use('/api/users', users);


// Server static assets if in production
if (process.env.NODE_ENV === 'production') {
  // Set static folder
  app.use(express.static('client/build'));

  app.get('*', (req, res) => {
    res.sendFile(path.resolve(__dirname, 'client', 'build', 'index.html'));
  });
}

const port = process.env.PORT || 5000;

app.listen(port, () => console.log(`Server running on port ${port}`));

然后在user.js路由文件中,我将其用于将电子邮件保存到会话变量中;

user.js

router.post(
  '/',
  passport.authenticate('jwt', { session: false }),
  (req, res) => {
    sess = req.session;
    var emails = req.user.email;
    sess.emails; 

  res.json({ msg: 'Users Works' })

    res.json({
      id: req.user.id,
      firstname: req.user.firstname,
      lastname: req.user.lastname,
      email: req.user.email,
      week: req.user.week,
      age: req.user.age
    });
  }
);

在我的dialogflow充满路由文件中,我具有以下内容;

fulfillmentRoutes.js


const {WebhookClient, Payload, Card} = require('dialogflow-fulfillment');
const express = require('express');

const chatbot = require('../chatbot/chatbot');
const mongoose = require('mongoose');
const passport = require('passport');
const keys = require('../config/keys');
const sourceFile = require('./api/users.js');
const User = require('../models/User');

module.exports = app => {


    var router = express.Router();

  app.post('/api/df_text_query', async (req, res) => {

      let responses = await chatbot.textQuery(req.body.text, req.body.userID, req.body.parameters);
      res.send(responses[0].queryResult);



  });

  app.post('/api/df_event_query', async (req, res) => {
      let responses = await chatbot.eventQuery(req.body.event, req.body.userID, req.body.parameters);
      res.send(responses[0].queryResult);


  });


    app.post('/', async (req, res) => {

        const agent = new WebhookClient({ request: req, response: res });

  async function welcome(agent) {


 let user = await User.findOne({'email': sess.emails});
             if (user !== null ) {

responseText = `${sess.emails}`;


      }

agent.add(responseText);

 } 

         let intentMap = new Map();
         intentMap.set('Default Welcome Intent', welcome);
         agent.handleRequest(intentMap);
    });

return router;
}


在fulfillment.js路由的欢迎异步函数中,我使用在user.js路由文件中声明的sess.emails。但是变量返回未定义。请提供任何指导或帮助。

谢谢

node.js reactjs express routes express-session
1个回答
0
投票

在您的user.js中,sess.emails;没有分配任何变量。

您可以尝试将其替换为sess.emails = emails;并检查电子邮件字段是否未定义吗?

© www.soinside.com 2019 - 2024. All rights reserved.