首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >猫鼬查询在Windows 10上工作完美,但挂在Ubuntu 18.04上

猫鼬查询在Windows 10上工作完美,但挂在Ubuntu 18.04上
EN

Stack Overflow用户
提问于 2019-11-27 15:37:52
回答 1查看 216关注 0票数 0

上下文

我已经开发了一个React系统,登录由一个API处理,该API分发JWT令牌。我已经在Windows 10上开发了一切,我将在EC2 Ubuntu18.04LTS单元上部署它。

问题

API在Express上运行。该应用程序能够在MongoDB和Linux上建立DB连接(托管在Windows上)(尽管在Linux上花费的时间要长得多)。然而,该应用程序无法进行查询。find或findOne函数都不提供任何反馈,而它们在我的Windows机器上运行得非常好。

相关代码

守则如下:

App.js

代码语言:javascript
复制
const createError = require('http-errors');
const express = require('express');
const app = express();
const path = require('path');
const cookieParser = require('cookie-parser');
const logger = require('morgan');
const cors = require('cors');
const mongoose = require('mongoose');
const dotenv = require('dotenv');

dotenv.config();

//Connect to DB
mongoose.connect(process.env.DB_CONNECT, {useNewUrlParser: true, useUnifiedTopology: true}, () => {
    console.log("Connected to DB!");
});

//Import routes
...
const authentication = require('./routes/Auth');
...

//Middleware
app.use(cors());
app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({extended: false}));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));

//Route middleware
...
app.use('/auth', authentication);
...

// catch 404 and forward to error handler
app.use(function (req, res, next) {
    next(createError(404));
});

// error handler
app.use(function (err, req, res, next) {
    // set locals, only providing error in development
    res.locals.message = err.message;
    res.locals.error = req.app.get('env') === 'development' ? err : {};

    // render the error page
    res.status(err.status || 500);
    res.render('error');
});

app.listen(3003, () => {
    console.log("server is up and running");
});
module.exports = app;

Auth.js

代码语言:javascript
复制
const router = require('express').Router();
const User = require('../model/user');

const jwt = require('jsonwebtoken');
const bcrypt = require('bcryptjs');
const {registerValidation, loginValidation} = require('../model/Validation');

...

router.post('/login', async (req, res) => {
    //Validate the data
    const {error} = loginValidation(req.body);
    if(error) return res.status(400).send(error.details[0].message);

    //Check if exists
    //Application fails here
    const user = await User.findOne({email: req.body.email}, function (err) {console.log(err)});
    if(!user) return res.status(400).send('Email or password is wrong');

    //Check if password is correct
    const validPass = await bcrypt.compare(req.body.password, user.password);
    if(!validPass) return res.status(400).send('Email or password is wrong');

    //Create and assign a token
    const token = jwt.sign({_id: user._id}, process.env.TOKEN_SECRET, { expiresIn: 60 * 240});
    res.header('auth-token', token).send(token);
})

...

module.exports = router;

user.js (模型)

代码语言:javascript
复制
const mongoose = require('mongoose');

const userSchema = new mongoose.Schema({
    name: {
        type: String,
        required: true,
        max: 255
    },
    email: {
        type: String,
        required: true,
        max: 255
    },
    password: {
        type: String,
        required: true,
        max: 1024,
        min: 6
    },
    date: {
        type: Date,
        default: Date.now
    }
});

module.exports = mongoose.model('User', userSchema);

我做了什么,

  • 我检查了错误,但似乎找不到任何错误。
  • 我检查了连接,它能够连接到服务器。
  • ,我更改了连接参数,没有改变任何行为。

我的目标

我希望能够在我的Linux Ubuntu上运行API,这样我就可以部署实际的React应用程序。现在,登录显然不起作用。API中的所有其他端点(有许多函数/端点,但这些端点与登录端点或MongoDB都没有关系)都非常正常。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-11-28 12:59:02

我的问题很简单实际上..。我注意到我的readystate为0,所以我在我的App.js文件中添加了以下行,以查看到底出了什么问题:

代码语言:javascript
复制
//Connect to DB
mongoose.connection.on('open', function (ref) {
    console.log('Connected to mongo server.');
});
mongoose.connection.on('error', function (err) {
    console.log('Could not connect to mongo server!');
    console.log(err);
});
mongoose.connect(process.env.DB_CONNECT, {useNewUrlParser: true, useUnifiedTopology: true}, () => {
    console.log("Connected to DB!");
}).then(r => console.log(r.connections));

在那之后,我注意到我的连接已经关闭,并且我有一个TransientTransactionError。

解决方案

我只是忘了把新服务器上的IP地址添加到我的IP白名单中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59073696

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档