最新消息: 电脑我帮您提供丰富的电脑知识,编程学习,软件下载,win7系统下载。

NodeJs会话,在邮递员中工作,但不在浏览器中工作

IT培训 admin 7浏览 0评论

NodeJs会话,在邮递员中工作,但不在浏览器中工作

我在快速会话中遇到一些问题,在该会话中我无法检索以前存储的会话变量。以下是我编写的部分代码。

server.js

let express = require('express'),
    path = require('path'),
    bodyParser = require('body-parser'),
    cors = require('cors'),
    config = require('./config/database'),
    expressSession = require('express-session'),
    uid = require('uid-safe'),
    db;

let app = express();

//Import Routes
let auth = require('./routes/auth'),
    chimerListing = require('./routes/chimer-listing'),
    brandListing = require('./routes/brand-listing');

//Specifies the port number
let port = process.env.PORT || 3000;
// let port = 3000;

// Express session
app.use(expressSession({
    secret: "asdasd",
    resave: true,
    saveUninitialized: false,
    cookie: {
        maxAge: 36000000,
        secure: false
    }
}));

//CORS Middleware
app.use(cors());

//Set Static Folder
var distDir = __dirname + "/dist/";
app.use(express.static(distDir));

//Body Parser Middleware
app.use(bodyParser.json());

//MongoDB
let MongoClient = require('mongodb').MongoClient;

MongoClient.connect(config.database, (err, database) => {
    if (err) return console.log(err)
    db = database;

    //Start the server only the connection to database is successful
    app.listen(port, () => {
        console.log('Server started on port' + port);
    });    
});

//Make db accessbile to routers;
app.use(function(req, res, next) {
    req.db = db;
    res.set('Access-Control-Allow-Origin', '*');
    res.set('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE');
    res.set('Access-Control-Allow-Headers', 'Content-Type');
    next();
});

//Routes
app.use('/login', auth);
app.use('/user-listing', userListing);
app.use('/brand-listing', brandListing);

//Index Route
app.get('/', (req, res) => {
    res.send('Invalid Endpoint');
});

genuuid = function() {
    return uid.sync(18);
};

auth.js

let express = require('express'),
    router = express.Router(),
    db;

//Login Router for chimer
router.post('/chimer', (req, res, next) => {
    db = req.db;

    // let client = req.client;
    db.collection('chimeUser').find({
        Username: req.body.username,
        Password: req.body.password
    }).toArray().then(function(docs) {
        //If there is such user
        if (docs.length >= 1) {
            req.session.chimerId = docs[0]._id;
            console.log(req.session);
            req.session.save(function(err) {
                    // session saved
                    if (err)
                        console.log(err)
                    res.json({
                        success: true,
                        chimerId: docs[0]._id
                            //objects: docs
                    });
                })
        } else {
            res.json({
                success: false,
                //objects: docs
            })
        }
    });
});

//Login Router brand
router.post('/brand', (req, res, next) => {
    db = req.db;
    db.collection('brand').find({
        Username: req.body.username,
        Password: req.body.password
    }).toArray().then(function(docs) {
        req.session.brand = docs;

        console.log(req.session.brand);
        //If there is such user
        if (docs.length >= 1) {
            res.json({
                success: true,
                //objects: docs
            })
        } else {
            res.json({
                success: false,
                //objects: docs
            })
        }
        //db.close()
    });
});
});

module.exports = router;

user-listing.js

let express = require('express'),
    moment = require('moment'),
    router = express.Router(),
    // ObjectID = require('mongodb').ObjectID,
    db, client;

// let applyListing = require('../models/chimer-listing');

//Retrieve All Listing
router.get('/getAllListing', (req, res, next) => {
    db = req.db;
    console.log(req.session)
    db.collection('listing').find().toArray().then(function(listing) {
        //If there is any listing
        if (listing.length >= 1) {
            res.json({
                success: true,
                results: listing
            })
        } else {
            res.json({
                success: false,
            })
        }
        //db.close()
    });
});
module.exports = router;

因此,在我的server.js中,我有三个路由文件,分别是auth,用户列表和品牌列表。

首先,用户需要登录在angular2中开发的Web应用程序登录,这将触发身份验证路由。然后它将检查凭据是否存在于数据库中(如果存在),然后将ID分配给req.session.chimerId,以便在其他路由中,我将能够使用此chimerId。

接下来,用户登录后,他们将检索项目列表。问题出现在我似乎无法检索以前保存的req.session.chimerId的地方。它将是不确定的

注意:我使用Postman和浏览器尝试了此操作。在邮递员中,它可以正常工作,我可以取回req.session.chimerId,而当我使用angular2应用程序命中端点时req.session.chimerId始终为空

回答如下:

您解决了吗?我面临着同样的问题。如果您已解决,请分享解决方案

NodeJs会话,在邮递员中工作,但不在浏览器中工作

我在快速会话中遇到一些问题,在该会话中我无法检索以前存储的会话变量。以下是我编写的部分代码。

server.js

let express = require('express'),
    path = require('path'),
    bodyParser = require('body-parser'),
    cors = require('cors'),
    config = require('./config/database'),
    expressSession = require('express-session'),
    uid = require('uid-safe'),
    db;

let app = express();

//Import Routes
let auth = require('./routes/auth'),
    chimerListing = require('./routes/chimer-listing'),
    brandListing = require('./routes/brand-listing');

//Specifies the port number
let port = process.env.PORT || 3000;
// let port = 3000;

// Express session
app.use(expressSession({
    secret: "asdasd",
    resave: true,
    saveUninitialized: false,
    cookie: {
        maxAge: 36000000,
        secure: false
    }
}));

//CORS Middleware
app.use(cors());

//Set Static Folder
var distDir = __dirname + "/dist/";
app.use(express.static(distDir));

//Body Parser Middleware
app.use(bodyParser.json());

//MongoDB
let MongoClient = require('mongodb').MongoClient;

MongoClient.connect(config.database, (err, database) => {
    if (err) return console.log(err)
    db = database;

    //Start the server only the connection to database is successful
    app.listen(port, () => {
        console.log('Server started on port' + port);
    });    
});

//Make db accessbile to routers;
app.use(function(req, res, next) {
    req.db = db;
    res.set('Access-Control-Allow-Origin', '*');
    res.set('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE');
    res.set('Access-Control-Allow-Headers', 'Content-Type');
    next();
});

//Routes
app.use('/login', auth);
app.use('/user-listing', userListing);
app.use('/brand-listing', brandListing);

//Index Route
app.get('/', (req, res) => {
    res.send('Invalid Endpoint');
});

genuuid = function() {
    return uid.sync(18);
};

auth.js

let express = require('express'),
    router = express.Router(),
    db;

//Login Router for chimer
router.post('/chimer', (req, res, next) => {
    db = req.db;

    // let client = req.client;
    db.collection('chimeUser').find({
        Username: req.body.username,
        Password: req.body.password
    }).toArray().then(function(docs) {
        //If there is such user
        if (docs.length >= 1) {
            req.session.chimerId = docs[0]._id;
            console.log(req.session);
            req.session.save(function(err) {
                    // session saved
                    if (err)
                        console.log(err)
                    res.json({
                        success: true,
                        chimerId: docs[0]._id
                            //objects: docs
                    });
                })
        } else {
            res.json({
                success: false,
                //objects: docs
            })
        }
    });
});

//Login Router brand
router.post('/brand', (req, res, next) => {
    db = req.db;
    db.collection('brand').find({
        Username: req.body.username,
        Password: req.body.password
    }).toArray().then(function(docs) {
        req.session.brand = docs;

        console.log(req.session.brand);
        //If there is such user
        if (docs.length >= 1) {
            res.json({
                success: true,
                //objects: docs
            })
        } else {
            res.json({
                success: false,
                //objects: docs
            })
        }
        //db.close()
    });
});
});

module.exports = router;

user-listing.js

let express = require('express'),
    moment = require('moment'),
    router = express.Router(),
    // ObjectID = require('mongodb').ObjectID,
    db, client;

// let applyListing = require('../models/chimer-listing');

//Retrieve All Listing
router.get('/getAllListing', (req, res, next) => {
    db = req.db;
    console.log(req.session)
    db.collection('listing').find().toArray().then(function(listing) {
        //If there is any listing
        if (listing.length >= 1) {
            res.json({
                success: true,
                results: listing
            })
        } else {
            res.json({
                success: false,
            })
        }
        //db.close()
    });
});
module.exports = router;

因此,在我的server.js中,我有三个路由文件,分别是auth,用户列表和品牌列表。

首先,用户需要登录在angular2中开发的Web应用程序登录,这将触发身份验证路由。然后它将检查凭据是否存在于数据库中(如果存在),然后将ID分配给req.session.chimerId,以便在其他路由中,我将能够使用此chimerId。

接下来,用户登录后,他们将检索项目列表。问题出现在我似乎无法检索以前保存的req.session.chimerId的地方。它将是不确定的

注意:我使用Postman和浏览器尝试了此操作。在邮递员中,它可以正常工作,我可以取回req.session.chimerId,而当我使用angular2应用程序命中端点时req.session.chimerId始终为空

回答如下:

您解决了吗?我面临着同样的问题。如果您已解决,请分享解决方案

发布评论

评论列表 (0)

  1. 暂无评论