Mongodb mongoose.save()和.find()永远不会返回响应
我正在尝试构建一个非常简单的express应用程序。我需要能够连接到mongoose并使用我定义的模式保存数据。我似乎一切都井然有序,但logs.js中的.find()和.save()调用从未返回响应 这里是index.jsMongodb 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
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端口,除非你有充分的理由不这样做。太棒了。这就解决了问题。