不明白为什么写了一个登录的接口后,mongodb的连接就出问题了,只要登录请求发一次,请求结束后,它的服务就会直接退出。
启动服务时,连接数据库:
const mongoose = require("mongoose");
const db = require('../db/config/key').mongoURI;
//connect db
mongoose.connect(db,{ useNewUrlParser: true }).then( () => console.log('DB Successful!')).catch((err) => console.log(err));
下面是我的 登录接口:
/**登录
* authenticate()方法有3个参数,第一是name,即验证策略的名称,第二个是options,即
*/
router.post("/login",urlencodedParser,(req,res,next) => {
const loginUser = {
email:req.body.email,
password:req.body.password
};
console.log(loginUser);
passport.authenticate('local', {
successRedirect:'/',
failureRedirect: '/admin/login',
failureFlash: true
})(req, res, next);
// UserSchema.findOne({
// email:loginUser.email
// }).then(users => {
// console.log('user存在吗?' + users)
// if(!users){
// return done(null, false, {message: 'No User Found'});
// }
// //验证密码
// bcrypt.compare(loginUser.password, users.password, (err, isMatch) => {
// if(err) throw err;
// if(isMatch){
// res.redirect('/')
// } else {
// res.redirect('/admin/login')
// }
// })
// })
});
passport.js
const UserSchema = require('../models/UserSchema');
module.exports = function(passport){
passport.use(new LocalStrategy({usernameField: 'email'}, (email, password, done) => {
console.log('获取的字段:' + email+'/'+ password)
// Match user
UserSchema.findOne({
email:email
}).then(users => {
console.log('user存在吗?' + users)
if(!users){
return done(null, false, {message: 'No User Found'});
}
// Match password
bcrypt.compare(password, users.password, (err, isMatch) => {
console.log('password ' + password);
console.log('user.password' + users.password);
if(err) throw err;
if(isMatch){
console.log('isMatch ' + isMatch)
//登录成功,返回 token
// const rule = {
// id: users._id,
// email:users.email,
// admin:'true'
// };
// jwt.sign(rule,secretKey,{expiresIn:3600},(err,token) => {
// if(err) throw err;
// res.json({
// sucess:true,
// token:"Bearer " + token
// });
// });
return done(null, users);
} else {
return done(null, false, {message: 'Password Incorrect'});
}
})
})
}));
只要发一次请求,就会直接退出,然后在窗口就会有这样的提示,又断掉了。
{ MongoNetworkError: failed to connect to server [localhost:27017] on first connect [MongoNetworkError: connect ECONNREFUSED 127.0.0.1:27017]
at Pool.<anonymous> (E:\API\anviz\anviz\web\node_modules\mongodb-core\lib\topologies\server.js:564:11)
at Pool.emit (events.js:182:13)
at Connection.<anonymous> (E:\API\anviz\anviz\web\node_modules\mongodb-core\lib\connection\pool.js:317:12)
at Object.onceWrapper (events.js:273:13)
at Connection.emit (events.js:182:13)
at Socket.<anonymous> (E:\API\anviz\anviz\web\node_modules\mongodb-core\lib\connection\connection.js:246:50)
at Object.onceWrapper (events.js:273:13)
at Socket.emit (events.js:182:13)
at emitErrorNT (internal/streams/destroy.js:82:8)
at emitErrorAndCloseNT (internal/streams/destroy.js:50:3)
at process._tickCallback (internal/process/next_tick.js:63:19)
name: 'MongoNetworkError',
errorLabels: [ 'TransientTransactionError' ],
[Symbol(mongoErrorContextSymbol)]: {} }
我在本地配置有 mongodb,并在windows中也有添加 mongodb 的服务。
当启动电脑后,mongodb 服务也启动了,在 windows 的启动服务中的配置为:E:APIDBbinmongod.exe --bind_ip 192.168.70.181 --logpath E:APIDBlogmongodb.log --logappend --dbpath E:APIDBdatadb --port 27017 --service
但是每次服务启动后,也必须要手动敲一遍:mongod.exe --dbpath E:APIDBdatadb 才会启动成功,然后这个手动启动的服务只能使用一次,请求一次就直接断掉了?
请问是什么原因呢?
非常着急,非常感谢!
你这不是连接失败的错误吗~
你启动了
mongodb
的服务是没错,关键是我没看你程序有连接的操作啊。