Использование экспресс-сессии для обмена информацией по различным маршрутам - PullRequest
0 голосов
/ 25 сентября 2019

Мне интересно, может ли кто-нибудь помочь мне, пожалуйста.У меня есть приложение реагирования, которое содержит диалоговое окно (платформа Google Chatbot).Я хотел бы поделиться информацией в пользовательском маршруте к диалогу выполнения потока с помощью экспресс-сессии.Вот мой основной файл 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
    });
  }
);

В моем файле маршрута полного заполнения диалогового потока у меня есть следующее:

executementRoutes.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;
}


В приветственной асинхронной функции на маршруте assignment.js я использую sess.emails, который был объявлен в файле маршрутов user.js.Однако переменная возвращается неопределенной.Любое руководство или помощь будут оценены, пожалуйста.

Спасибо

1 Ответ

0 голосов
/ 25 сентября 2019

В вашем user.js, sess.emails; не присваивается никакая переменная.

Можете ли вы попробовать заменить его sess.emails = emails; и проверить, не заполнено ли поле электронной почты?

...