路由中的chema操作順利進行。 但是當我重復使用相同的代碼(例如只是一個find()的呼叫)并在一個檔案('node test.js')中執行時,我得到 - "MongooseError: 操作refreshtokens.findOne()緩沖在10000ms后超時。"
所以我試著檢查mongoose.connection.readyState,果然它等于0(已斷開連接)。 為什么呢? 在我的路由中從未接觸過 mongoose.connection,而且我在那里從未遇到任何問題(它只在 server.js 中初始化)。
最終,我試圖創建一個我將安排的可執行檔案,并且它需要訪問資料庫。
代碼沒有任何例外(我不認為;) -
server.js
const express = require('express')
const app = express()
const mongoose = require('mongoose')
mongoose.connect(process.env.MONGODB_URI, {useNewUrlParser: true, useUnifiedTopology: true})
const db = mongoose.connection
db.on('error', (error) => console. error(error))
db.once('open', () => console. log('Connected to Database')
...
./models/refreshtoken.js
const mongoose = require('mongoose')
const refreshTokenSchema = new mongoose.Schema({
token: {
type: String,
required: true。
}
})
module.exports = mongoose.model(' RefreshToken', refreshTokenSchema)
測驗可執行檔案(test.js)
const RefreshToken = require(' 。 /models/refreshtoken.js')。)
const mongoose = require('mongoose')。
(async () => {
await testGetToken()。
console.log("run testGetToken()")。
})().catch(e => {
//處理連鎖失敗的事實。
console.log(e)
});
async function testGetToken() {
try {
console.log("here in testGetToken() call"/span>)
console.log("pre if mongoose. connection = " mongoose.connection.ready)。)
if (mongoose.connection.readyState !=1) {
await mongoose.connect(process. env.MONGODB_URI, {useNewUrlParser。true, useUnifiedTopology: true})
}
console.log("post if mongoose. connection = " mongoose.connection.ready)。)
const token = await RefreshToken.find()
console.log(token)
} catch (err) {
console.log("testGetToken() err ="/span> err)
}
}
在我加入 await mongoose.connect 的 if 陳述句后,可執行程式將獲得并列印令牌,但隨后該行程并沒有關閉(我必須按 ctrl-c 鍵兩次)。正如頂部所指出的,如果沒有 await mongoose.connect,我將得到 MongooseError。
最想知道的是,為什么mongoose有自己的想法,只在我執行的檔案中斷開連接(以及如何糾正)。在server.js中也添加了mongoose.connection.on('disconnected'...)事件代碼,它從未跳閘。
接下來最好的事情是,如果我們不期望在這樣的情況下進行任何有害的影響,如何讓可執行檔案的行程關閉。 我可以在這里做更多的功課,但我傾向于認為最好是解決問題,而不是忽視它們(見:最好的事情)? :)
感謝任何幫助。
感謝您提供的任何幫助。 謝謝你。
uj5u.com熱心網友回復:
它要么有一個你沒有捕捉到的錯誤,要么找不到一個。我也遇到過同樣的問題,在我的例子中,我誤用了findOne(),它沒有匹配起來。試著用mongo GUI和console.log()來了解你的結果。
uj5u.com熱心網友回復:
我想我弄明白了。 在一個一次性的腳本中,你需要連接和關閉連接(mongoose.connect和mongoose.connection.close)。
我以為它會利用現有的mongoose連接,特別是當我把代碼放在(并執行)我的路由檔案中時,但即使如此,情況也并非如此。 Heroku的腳本行程(或者這叫什么?)必須與Web行程分開。
我還想,如果我的腳本中有mongoose.connection.close(),我又認為它們是一體的,那么它將關閉該連接,我的路由中的模式呼叫將失敗。
這里沒有什么可看的了:) (我不認為;)(除了我這個新手在這里搖頭之外:)
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/333047.html
標籤:
上一篇:Swift:從PDF生成的NSMutableAttributedString。可以決議成字典嗎?
下一篇:sql連接查詢日期格式
