gpt4 book ai didi

node.js - Mongoose 5.0.16,获取无法读取未定义的属性 'replace'

转载 作者:太空宇宙 更新时间:2023-11-04 00:10:17 25 4
gpt4 key购买 nike

我创建了一个新的 Node、Express、Mongo 应用程序,但在设置 MongoDB 时突然出现 Mongoose 错误。

Server Listening to Port: 9001 
C:\Users\Sarwin\Desktop\Sarwin\Projects\SchoolProject\node_modules\mongoose\node_modules\mongodb-core\lib\auth\scram.js:130
username = username.replace('=', '=3D').replace(',', '=2C');
^

类型错误:无法读取未定义的属性“替换”

 at executeScram (C:\Users\Sarwin\Desktop\Sarwin\Projects\SchoolProject\node_modules\mongoose\node_modules\mongodb-core\lib\auth\scram.js:130:24)
at C:\Users\Sarwin\Desktop\Sarwin\Projects\SchoolProject\node_modules\mongoose\node_modules\mongodb-core\lib\auth\scram.js:299:7
at _combinedTickCallback (internal/process/next_tick.js:73:7)
at process._tickCallback (internal/process/next_tick.js:104:9) [nodemon] app crashed - waiting for file changes before starting...

我设置 MongoDB 的代码是:

const session    = require('express-session');
const mongoose = require('mongoose');
const mongoStore = require('connect-mongo')(session);

// Local connection
let mongoConnectionLocal = {
'url': `mongodb://${process.env.MongoDBLocalUser}:${process.env.MongoDBLocalPassword}@127.0.0.1:27017/my-database`
};

mongoose.connect(mongoConnectionLocal.url, {auth:{authdb:"admin"}}, err => { if(err) { console.log(err); }});

这很奇怪,因为此代码适用于 Mongoose 版本 4.13.2 及更低版本(我尝试卸载版本 5.0.16,然后安装版本 4.13.2,并且它工作时没有错误)。与 Mongoose 实现 MongoDB 连接有什么变化吗?

更新:有人说使用默认值,使用默认值会产生此错误:

 default: mongoose.connect(mongoConnectionLocal.url, err => { if(err) { console.log(err); }});

{ MongoError: Authentication failed.
at C:\Users\Sarwin\Desktop\Sarwin\Projects\SchoolProject\node_modules\mongoose\node_modules\mongodb-core\lib\connection\pool.js:598:61
at authenticateStragglers (C:\Users\Sarwin\Desktop\Sarwin\Projects\SchoolProject\node_modules\mongoose\node_modules\mongodb-core\lib\connection\pool.js:516:16)
at Connection.messageHandler (C:\Users\Sarwin\Desktop\Sarwin\Projects\SchoolProject\node_modules\mongoose\node_modules\mongodb-core\lib\connection\pool.js:552:5)
at emitMessageHandler (C:\Users\Sarwin\Desktop\Sarwin\Projects\SchoolProject\node_modules\mongoose\node_modules\mongodb-core\lib\connection\connection.js:309:10)
at Socket.<anonymous> (C:\Users\Sarwin\Desktop\Sarwin\Projects\SchoolProject\node_modules\mongoose\node_modules\mongodb-core\lib\connection\connection.js:452:17)
at emitOne (events.js:96:13)
at Socket.emit (events.js:188:7)
at readableAddChunk (_stream_readable.js:176:18)
at Socket.Readable.push (_stream_readable.js:134:10)
at TCP.onread (net.js:551:20)
name: 'MongoError',
message: 'Authentication failed.',
ok: 0,
errmsg: 'Authentication failed.',
code: 18,
codeName: 'AuthenticationFailed' }
(node:20124) UnhandledPromiseRejectionWarning: Unhandled promise rejection
(rejection id: 1): MongoError: Authentication failed.

最佳答案

此问题已通过删除连接 URI 中的用户名和密码得到解决

不要以这种方式设置 Mongoose 连接,

const session    = require('express-session');
const mongoose = require('mongoose');
const mongoStore = require('connect-mongo')(session);

// Local connection
let mongoConnectionLocal = {
'url':`mongodb://${process.env.MongoDBLocalUser}:${process.env.MongoDBLocalPassword}@127.0.0.1:27017/my-database`
};

mongoose.connect(mongoConnectionLocal.url, {auth:{authdb:"admin"}}, err => { if(err) { console.log(err); }});

创建一个选项并在其中设置数据库用户名和密码,

var options = {
auth: {authdb: 'admin'},
user: process.env.MongoDBLocalUser,
pass: process.env.MongoDBLocalPassword,
}

let mongoConnectionLocal = {
'url': `mongodb://127.0.0.1:27017/my-database`
};

mongoose.connect(mongoConnectionOnline.url, options, err => { if(err) { console.log(err); }});

而且它有效。

注意:有人在评论中说我使用了错误的凭据,但我对旧版本和新版本的 Mongoose 使用了相同的凭据,并且两者都有效。

其他人也遇到了这个问题。请参阅:MongoDB Auth Fails to find username on Bitnami MEAN Stack Image

[引用]https://github.com/Automattic/mongoose/issues/4891

关于node.js - Mongoose 5.0.16,获取无法读取未定义的属性 'replace',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50033010/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com