Mongoose.connect 不工作

Posted

技术标签:

【中文标题】Mongoose.connect 不工作【英文标题】:Mongoose.connect not working 【发布时间】:2018-09-15 19:35:34 【问题描述】:

当我在命令行中运行 node server.js 时,出现此错误:

C:\Users\Shaelyn\WebstormProjects\CIT366Projects\cms>node server.js
C:\Users\Shaelyn\WebstormProjects\CIT366Projects\cms\node_modules\express\lib\router\index.js:458
      throw new TypeError('Router.use() requires a middleware function but got a ' + gettype(fn))
      ^

TypeError: Router.use() requires a middleware function but got a Object
    at Function.use (C:\Users\Shaelyn\WebstormProjects\CIT366Projects\cms\node_modules\express\lib\router\index.js:458:13)
    at Function.<anonymous> (C:\Users\Shaelyn\WebstormProjects\CIT366Projects\cms\node_modules\express\lib\application.js:220:21)
    at Array.forEach (<anonymous>)
    at Function.use (C:\Users\Shaelyn\WebstormProjects\CIT366Projects\cms\node_modules\express\lib\application.js:217:7)
    at Object.<anonymous> (C:\Users\Shaelyn\WebstormProjects\CIT366Projects\cms\server.js:34:5)
    at Module._compile (module.js:643:30)
    at Object.Module._extensions..js (module.js:654:10)
    at Module.load (module.js:556:32)
    at tryModuleLoad (module.js:499:12)
    at Function.Module._load (module.js:491:3)
    at Function.Module.runMain (module.js:684:10)
    at startup (bootstrap_node.js:187:16)
    at bootstrap_node.js:608:3

我认为部分原因可能是mongoose.connect 是一个未解决的函数。有谁知道如何解决这个错误? 这是我的代码:

   // Get dependencies
    var express = require('express');
    var path = require('path');
    var http = require('http');
    var bodyParser = require('body-parser');
    var cookieParser = require('cookie-parser');
    var logger = require('morgan');
    var mongoose = require('mongoose');

// import the routing file to handle the default (index) route
var index = require('./server/routes/app');
const messageRoutes = require('./server/routes/messages');
const contactRoutes = require('./server/routes/contacts');
const documentRoutes = require('./server/routes/documents');

// establish a connection to the mongo database
mongoose.connect('mongodb://localhost:27017/cms');

var app = express(); // create an instance of express

// Tell express to use the following parsers for POST data
app.use(bodyParser.json());
app.use(bodyParser.urlencoded( extended: false ));
app.use(cookieParser());

app.use(logger('dev')); // Tell express to use the Morgan logger

// Tell express to use the specified director as the
// root directory for your web site
app.use(express.static(path.join(__dirname, 'dist')));

app.use('/', index);
app.use('/messages', messageRoutes);
app.use('/contacts', contactRoutes);
app.use('/documents', documentRoutes);

// Define the port address and tell express to use this port
const port = process.env.PORT || '3000';
app.set('port', port);

// Create HTTP server.
const server = http.createServer(app);

// Tell the server to start listening on the provided port
server.listen(port, function() console.log("API running on localhost: " + 
port));

【问题讨论】:

您是否尝试删除路由app.use('foo',fooRoutes) 并添加回调到 mongoose.connect 以检查连接是否已建立? 我没有。如何向 mongoose.connect 添加回调? mongoose.connect('mongodb://127.0.0.1:27017/trace-vehicle-dev') .then(() =&gt; console.log("Succesfully Connected to the Mongodb Database") ) .catch(() =&gt; console.log("Error Connecting to the Mongodb Database") ) 它仍然给我同样的错误 我做了一点搜索,发现这个 ***.com/a/28379965/7988438 好像你在你的一个路线文件中缺少一个 module.exports=router 【参考方案1】:

您的mongoose.connect 呼叫工作正常。如果不是,那么您肯定会收到 PromiseRejection 连接失败和 UnhandledPromiseRejection 已弃用警告。

您仍然可以通过在 mongoose 事件上添加少量事件侦听器来确保这一点。

mongoose.connect('mongodb://127.0.0.1:27017');
mongoose.connection.on('connected', () => console.log('Connected'));
mongoose.connection.on('error', () => console.log('Connection failed with - ',err));

来到你的错误。当您将函数以外的任何内容作为处理程序传递给 app.userouter.use 调用时,这种情况更有可能发生。 app.userouter.use 都需要将函数传递给它们,稍后 express 将在请求到达时调用。

代码顶部的 import 语句,你需要你的路由器很可能是这里的罪魁祸首,因为默认情况下每个 module.exports 都是一个对象。

我需要查看您的路由器文件以进一步挖掘问题,但您也可以自己验证。只需查看导入的每个路由器文件的module.exports 是否指向一个快速路由器实例 - express.Router()。这样每个路由文件都会导出一个配置的express.Router() 实例,该实例将是一个通过app.use() 调用附加到应用程序的函数。

【讨论】:

以上是关于Mongoose.connect 不工作的主要内容,如果未能解决你的问题,请参考以下文章

使用 mongoose.createConnection() 与 mongoose.connect() 时查询挂起

使用 mongoose.createConnection() 与 mongoose.connect() 时查询挂起

mongoose 数据库连接

nodejs mongoose在部署到aws时显示错误,在本地机器上工作

mongoose 文档 Connections

为啥 Mongo 至少打开 5 个连接? [复制]