我是新的MongoDB-抱歉提前为任何pebkac。
根据本文,统一拓扑范式远离了“连接”的概念,而是简单地设置一个连接字符串并开始执行操作。然后,每个操作都会失败或成功,这取决于驱动程序在执行该操作时是否可以到达服务器。
我试图实现以下示例代码,以在测试机器上建立到本地MongoDB服务器的“连接”,但它不起作用:节点抛出未捕获的promise拒绝消息,显然是因为它在某个地方出错。
然而,示例代码没有显示如何使用promise实现新的范例。我假设这是主要的问题,所以我尝试了下面显示的第二个代码,但仍然没有得到允许我检索记录的对象。你能告诉我我做错了什么,以及在Express应用程序中建议/最好的方法来确保它尽可能稳定吗?
第一次尝试:索引。js:
async function init(){
console.log("Starting...");
const MongoClient = require('mongodb');
const client = MongoClient('mongodb://test:test@localhost:27017', { useUnifiedTopology: true });
const coll = client.db('test').collection('foo');
await coll.insert({ test: 'document' });
const docs = coll.find({ test: 1 }, { readPreference: 'secondary' }).toArray();
console.dir({ docs });
await client.close();
}
init();
错误:
Starting...
(node:15328) UnhandledPromiseRejectionWarning: TypeError: client.db is not a function
at init (index.js:5:22)
at Object.<anonymous> (index.js:13:1)
at Module._compile (internal/modules/cjs/loader.js:1128:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1167:10)
at Module.load (internal/modules/cjs/loader.js:983:32)
at Function.Module._load (internal/modules/cjs/loader.js:891:14)
at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:71:12)
at internal/main/run_main_module.js:17:47
(node:15328) 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:15328) [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.
所以很明显,这是试图使用Promises,但是这个例子没有以这种方式实现。
下面是第二次尝试:
index.js:
async function init(){
console.log("Starting...");
const MongoClient = require('mongodb');
const client = MongoClient('mongodb://test:test@localhost:27017', { useUnifiedTopology: true })
.then(async (result) => {
console.log("Connected: result = ", result);
const db = result('test'); // Get the 'test' database
const coll = db.collection('foo'); // Ge the 'foo' collection
await coll.insert( { test: 'document' }); // Create a new document
const docs = coll.find({}, { readPreference: 'secondary'}) // Retrieve all docs
.then((results) => {
const data = results.toArray();
console.log('Results: ', data);
});
await client.close();
})
.catch((err) => {
console.log('Caught error: ', err);
});
}
init();
输出:
Starting...
Connected: result = MongoClient {
_events: [Object: null prototype] { newListener: [Function (anonymous)] },
_eventsCount: 1,
_maxListeners: undefined,
s: {
url: 'mongodb://test:test@localhost:27017',
options: {
servers: [Array],
caseTranslate: true,
useUnifiedTopology: true,
checkServerIdentity: true,
sslValidate: true,
auth: [Object],
authSource: 'admin',
dbName: 'test',
socketTimeoutMS: 360000,
connectTimeoutMS: 30000,
retryWrites: true,
useRecoveryToken: true,
readPreference: [ReadPreference],
credentials: [MongoCredentials],
promiseLibrary: [Function: Promise]
},
promiseLibrary: [Function: Promise],
dbCache: Map {},
sessions: Set {},
writeConcern: undefined,
namespace: MongoDBNamespace { db: 'admin', collection: undefined }
},
topology: NativeTopology {
_events: [Object: null prototype] {
authenticated: [Function (anonymous)],
error: [Function (anonymous)],
timeout: [Function (anonymous)],
close: [Function (anonymous)],
parseError: [Function (anonymous)],
fullsetup: [Function],
all: [Function],
reconnect: [Function (anonymous)],
serverOpening: [Function (anonymous)],
serverDescriptionChanged: [Function (anonymous)],
serverHeartbeatStarted: [Function (anonymous)],
serverHeartbeatSucceeded: [Function (anonymous)],
serverHeartbeatFailed: [Function (anonymous)],
serverClosed: [Function (anonymous)],
topologyOpening: [Function (anonymous)],
topologyClosed: [Function (anonymous)],
topologyDescriptionChanged: [Function (anonymous)],
commandStarted: [Function (anonymous)],
commandSucceeded: [Function (anonymous)],
commandFailed: [Function (anonymous)],
joined: [Function (anonymous)],
left: [Function (anonymous)],
ping: [Function (anonymous)],
ha: [Function (anonymous)]
},
_eventsCount: 24,
_maxListeners: Infinity,
s: {
id: 0,
options: [Object],
seedlist: [Array],
state: 'connected',
description: [TopologyDescription],
serverSelectionTimeoutMS: 30000,
heartbeatFrequencyMS: 10000,
minHeartbeatFrequencyMS: 500,
Cursor: [Function: Cursor],
bson: BSON {},
servers: [Map],
sessionPool: [ServerSessionPool],
sessions: Set {},
promiseLibrary: [Function: Promise],
credentials: [MongoCredentials],
clusterTime: null,
iterationTimers: Set {},
connectionTimers: Set {},
clientInfo: [Object]
}
}
}
Caught error: TypeError: result is not a function
at index.js:8:15
at processTicksAndRejections (internal/process/task_queues.js:97:5)
下面是从Node连接到MongoDB数据库的完整示例。JS使用统一拓扑范例(没有显式的连接
命令)。感谢@MahamhBhatnagar指出我的错误。
本例使用promise,在建立连接后,开始以每5秒插入一条记录的频率插入记录。如果禁用或断开MongoDB数据库,它将缓存插入,直到(a.超时,默认为30秒,或b.连接恢复)。如果超时,插入将丢失,但如果服务器重新联机,后续请求将得到正确处理。
如果我做错了,或者有什么建议,请告诉我。
index.js:
const url = 'mongodb://test:test@localhost:27017';
async function init(){
console.log("init...");
const MongoClient = require('mongodb');
return MongoClient(url, { useUnifiedTopology: true}); // Return a Promise
}
async function go(db_result) {
// Do an insert and output the last-inserted document.
console.log("Go...");
const db = db_result.db('test'); // Get the 'test' database
const coll = db.collection('foo'); // Ge the 'foo' collection
// Create a new document:
await coll.insertOne({ test: 'document' }, (err, response) => {
if (err) {
console.log("Error inserting", err);
}
else
{
console.log("New record: ", response.ops[0]) // Output newly inserted record (thanks to https://stackoverflow.com/questions/40766654)
}
});
}
// Sleep for a specified time:
function sleep(ms) {
return new Promise( resolve => {
setTimeout(resolve,ms)
})
}
init() // Set up connection, then start doing inserts.
.then( async (db_result) => {
// When MongoClient is instantiated:
while(true) {
console.log("Going...")
go(db_result)
console.log("Sleeping")
await sleep(5000);
}
})
.catch((err) => {
console.log("Caught error: ", err)
})
现在我想在一个污点中使用Drools,它在LocalCluster中正常工作,但是当我把它放在生产集群中时,它有错误。污点是: 我使用官方文件创建了kiesession。误差为: 也许有些东西没有初始化。但当blot执行时,我创建了一个新的kieservice。有人能帮我吗 谢啦!
我一直试图连接到我的Cassandra节点使用SSL选项,但我似乎无法让它工作。我有所有的密钥存储/信任存储设置正确。节点到节点加密工作,客户端到节点加密工作通过OpsCenter和。我的问题,我如何得到正确的证书/密钥/ca文件的cassandra-驱动程序在节点上?我尝试过根据我找到的提要导出,但是没有好的教程。 通过阅读其他Java连接教程,我可以只包含我的密钥库,在Ruby连接器上,它说它
本文向大家介绍环形拓扑和网格拓扑之间的区别,包括了环形拓扑和网格拓扑之间的区别的使用技巧和注意事项,需要的朋友参考一下 环形拓扑 在环形拓扑中,每个节点都以环形方式连接到其左节点和右节点,信息可以从一个节点流向另一个方向。如果有n个节点,则存在n个链接。如果要添加一个新节点,则整个连接将被中断。 网格拓扑 在网状拓扑中,每个节点使用其自己的专用链接连接到其他节点,并且信息可以从这些链接传播到任何节
我已经将我的nodejs应用程序配置为使用MongoDB。我可以成功地连接和添加数据到我的mongodb实例。我的应用程序配置如下(敏感信息编辑): 如果我点击endpoint,那么pizza文档就会很好地在数据库中创建,但我注意到连接从未关闭;这意味着endpoint从不将“all good”字符串作为响应发送。而且,对的任何后续请求都会抛出以下错误: 我似乎没有正确处理promise和asyn
我想连接到树莓Pi节点。我从网络外部设置的js服务器。 我的路由器声称端口是开放的。我尝试在127.0.0.0、0.0.0.0和我的公共IP地址运行服务器。 我曾尝试使用ngrok打开端口8080,服务器在其中托管一个简单的网页,但尝试访问myIP:8080不起作用。 有人能帮我吗?
我对storm使用Deubug是新手 我强制在 但是,当我完成了对拓扑的搜索时,找不到调试的结果在哪里 我注意到在,! 为什么它看不懂我的变化?