Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mongodb mongoose.save()和.find()永远不会返回响应_Mongodb_Express_Mongoose - Fatal编程技术网

Mongodb mongoose.save()和.find()永远不会返回响应

Mongodb mongoose.save()和.find()永远不会返回响应,mongodb,express,mongoose,Mongodb,Express,Mongoose,我正在尝试构建一个非常简单的express应用程序。我需要能够连接到mongoose并使用我定义的模式保存数据。我似乎一切都井然有序,但logs.js中的.find()和.save()调用从未返回响应 这里是index.js const express = require('express'); const morgan = require('morgan'); const helmet = require('helmet'); const cors = require('cors'); con

我正在尝试构建一个非常简单的express应用程序。我需要能够连接到mongoose并使用我定义的模式保存数据。我似乎一切都井然有序,但logs.js中的.find()和.save()调用从未返回响应

这里是index.js

const express = require('express');
const morgan = require('morgan');
const helmet = require('helmet');
const cors = require('cors');
const mongoose = require('mongoose');

require('dotenv').config({path: __dirname + '\\.env'});

const middleware = require('./middleware');
const logs = require('./api/logs');

mongoose.connect(process.env.DATABASE_URL /*DATABASE_URL=mongodb://localhost:2222/travel-log*/, {
    useNewUrlParser: true,
    useUnifiedTopology: true,
});

const app = express();
app.use(morgan('common'));
app.use(helmet());

const port = process.env.PORT || 2222;

app.use(cors({
    origin: process.env.CORS_ORIGIN
}));

app.use(express.json());


app.use('/api/logs', logs);

app.use(middleware.notFound);
app.use(middleware.errorHandler);

app.listen(port, () => {
    console.log(`Listening at http://localhost:${port}`);
});
这里是logs.js

const { Router } = require('express');

const  LogEntry = require('../models/logEntry');
const router = Router();

router.get('/', async (req, res, next) => {
    try {
        const entries = await LogEntry.find();
        await res.json(entries);
    } catch (error) {
        next(error);
    }
});

router.post('/', async (req, res, next) => {
    try {
        const logEntry = new LogEntry(req.body);
        const createdEntry = await logEntry.save();
        await res.json(createdEntry);
    } catch (error) {
        if (error.name === 'ValidationError') {
            res.status(422);
        }
        next(error);
    }
}
);

module.exports = router;

有没有解释为什么这些电话打不通?需要注意的是,我一直在30秒后得到
MongooseTimeoutError
。以下是日志:

(node:17704) UnhandledPromiseRejectionWarning: MongooseTimeoutError: Server selection timed out after 30000 ms
    at new MongooseTimeoutError (C:\Users\jones\WebstormProjects\travel-log\node_modules\mongoose\lib\error\timeout.js:22:11)
    at NativeConnection.Connection.openUri (C:\Users\jones\WebstormProjects\travel-log\node_modules\mongoose\lib\connection.js:804:19)
    at Mongoose.connect (C:\Users\jones\WebstormProjects\travel-log\node_modules\mongoose\lib\index.js:333:15)
    at Object.<anonymous> (C:\Users\jones\WebstormProjects\travel-log\server\src\index.js:12:10)
    at Module._compile (internal/modules/cjs/loader.js:955:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:991:10)
    at Module.load (internal/modules/cjs/loader.js:811:32)
    at Function.Module._load (internal/modules/cjs/loader.js:723:14)
    at Function.Module.runMain (internal/modules/cjs/loader.js:1043:10)
    at internal/main/run_main_module.js:17:11
(node:17704) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 1)
(node:17704) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
(节点:17704)未经处理的PromisejectionWarning:MongooseTimeoutError:服务器选择在30000毫秒后超时
在新的MongooseTimeoutError(C:\Users\jones\WebstormProjects\travel log\node\U modules\mongoose\lib\error\timeout.js:22:11)
在NativeConnection.Connection.openUri(C:\Users\jones\webstorprojects\travel log\node\u modules\mongoose\lib\Connection.js:804:19)
在Mongoose.connect(C:\Users\jones\webstorprojects\travel log\node\u modules\Mongoose\lib\index.js:333:15)
反对。(C:\Users\jones\websprojects\travel log\server\src\index.js:12:10)
at模块编译(内部/modules/cjs/loader.js:955:30)
at Object.Module._extensions..js(internal/modules/cjs/loader.js:991:10)
在Module.load(内部/modules/cjs/loader.js:811:32)
at Function.Module._load(内部/modules/cjs/loader.js:723:14)
位于Function.Module.runMain(internal/modules/cjs/loader.js:1043:10)
在internal/main/run\u main\u module.js:17:11
(节点:17704)未处理的PromisejectionWarning:未处理的承诺拒绝。此错误源于在没有catch块的异步函数中抛出,或者拒绝未使用.catch()处理的承诺。(拒绝id:1)
(节点:17704)[DEP0018]弃用警告:未处理的承诺拒绝已弃用。将来,未处理的承诺拒绝将使用非零退出代码终止Node.js进程。

等待解释。

数据库\u URL=mongodb://localhost:2222
看起来不太正确,尤其是因为你的应用程序也在2222端口上运行。它需要连接到mongodb服务器,而不是你自己的应用程序。所以我应该在某个端口上运行mongod,并将实例I传递到我的连接字符串吗?对,只要使用默认的27017端口,除非你有充分的理由不这样做。太棒了。这就解决了问题。