gpt4 book ai didi

javascript - 使用 Express Node.js 和 mongoose 声明 session

转载 作者:太空宇宙 更新时间:2023-11-04 00:25:56 25 4
gpt4 key购买 nike

我正在使用 Node.js、Express、MongoDB (mongoose) 制作一个应用程序,我试图在与 server.js 不同的文件中建立数据库连接,但我在 connect-mongo 方面遇到了困难。

首先在我的 server.js 中我有这个:

/* jshint esversion: 6 */
'use strict';
let express = require('express');

const db = require('./app/config/db');
const routes = require('./app/routes/routes');
const users = require('./app/routes/users');

let app = express();

const conn = db.connect();

app.set('views', path.join(__dirname, 'app/views'));
app.set('view engine', 'hbs');

...

app.use('/', routes);
app.use('/users', users);

app.listen(3000);

module.exports = app;

这只处理应用程序路由和应用程序服务器,然后我的项目就有了下一个文件夹结构:

myApp
|___app
|___bin
|___config
|___credentials.js
|___db.js
|___controllers
|___routes
|___views
|___node_modules
|___package.json
|___server.js

在配置文件夹中,我有两个 javascript 来处理与数据库的连接,在credentials.js 中实际上只有用于访问数据库的凭据。

那么我的问题出在 db.js 内部,接下来我向您展示该文件:

/* jshint esversion: 6 */
'use strict';
let mongoose = require('mongoose'),
async = require('async'),
express = require('express');

const credentials = require('./credentials');
const session = require('express-session');
const MongoStore = require('connect-mongo')(session);

let db = mongoose.connection,
app = express();

exports.connect = function(done){
const connection = mongoose.connect(credentials.host, credentials.database, credentials.port, credentials.db);

db.on('error', (error =>{
console.log("Error estableciendo la conexion");
process.exit(1);
}));

db.on('open', (argv)=>{
db.db.listCollections().toArray((err, collections)=>{
collections.forEach(x => console.log(x));
});
});

/* Define sessions in MongoDB */
app.use(session({
secret: credentials.sessionSecret,
store: new MongoStore({ dbPromise: db })
}));
}

我收到下一个错误: Error with nodemon server.js

你知道如何使用这个项目结构启动 connect-mongo 吗?

顺便说一句,在credentials.js 文件中,我将 Bluebird 设置为我的 promise 库。

提前谢谢您!

最佳答案

问题是,就像@MananVaghasiya所说,我的变量db不是一个Promise,这是mongoose项目内部的一个错误,所以我将连接类型更改为与mongoose的基本uri连接,然后在登录查询后设置 session 。

此时的代码如下所示,感谢您的宝贵时间。

module.exports.login = (req, res)=>{
const mail = req.body.mail.replace(/^\s\s*/, '').replace(/\s\s*$/, ''),
password = req.body.password;

user.findOne({$and:[{'mail' : mail}, {'password': password}]}, (err, user)=>{
if(err){
res.send(err);
} else {
/* Define sessions in MongoDB */
app.use(session({
secret: credentials.sessionSecret,
store: new MongoStore({ mongooseConnection: db }),
saveUnitialized: true,
resave: false,
cookie:{
path: "/"
},
name: user.role
}));
return user;
}
});
};

关于javascript - 使用 Express Node.js 和 mongoose 声明 session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42800738/

25 4 0
文章推荐: node.js - 需要帮助查找 JSON 文件 (node.js) 中列中的最大值
文章推荐: css - 我的链接未被其父
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com