मैं अपने आईओएस ऐप में लॉगिन और कार्यों को संभालने के लिए नोड.जेएस सर्वर बना रहा हूं। मेरे द्वारा लिखे गए कार्यों में से एक चेकएथ है, जो मेरे अधिकांश अनुरोधों के लिए मिडलवेयर है ताकि यह जांचा जा सके कि कोई उपयोगकर्ता प्रमाणित है या नहीं और उसे वह करने की अनुमति है जो वह करना चाहता है।
अब मुझे एक समस्या का सामना करना पड़ रहा है जहां कभी-कभी, लेकिन हमेशा नहीं, मिडलवेयर फ़ंक्शन (चेकएथ) अटक जाता है। मुझे अपने कंसोल में इस फ़ंक्शन से लॉग प्राप्त होते हैं, लेकिन अनुरोध से कुछ भी नहीं (जो प्रमाणीकरण के सफल होने के बाद होना चाहिए)।
यह वह कार्य है जिसे मैंने वर्तमान में लिखा है। यह अभी तक अनुकूलित नहीं है क्योंकि मैं हर चीज का परीक्षण कर रहा हूं, लेकिन इसे वही करना चाहिए जो मैं इसे करना चाहता हूं (और यह ज्यादातर समय करता है):
const saltRounds = process.env.JWT_ROUNDS
const secret = process.env.JWT_SECRET
const checkRefreshTime = 10 // set to 10 seconds for testing, will increase later
function checkAuth(req, res, next) {
var token = req.headers['x-access-token']
jwt.verify(token, secret, (error, decoded) => {
console.log("checking auth")
if(error) {
console.log(error)
res.json({ errorCode: 406 })
} else {
const decoded = jwt.verify(token, secret)
var checkTime = (Date.now() / 1000) - checkRefreshTime;
if (decoded.iat < checkTime) {
console.log("DEC:", decoded)
const userID = decoded.userID
const queryString = "SELECT userRefreshToken, userName, userDisplayName, userProfilePicURL, userDOB, userGender FROM users WHERE userID = ? LIMIT 1"
pool.getConnection(function(error, connection) {
if(error) {
console.log(error)
res.json({ errorCode: 500 })
}
connection.query(queryString, [userID], (error, selectRows, fields) => {
if(error) {
console.log(error)
res.json({ errorCode: 500 })
}
if(selectRows.length > 0) {
if(selectRows[0].userRefreshToken == decoded.userRefreshToken) {
var userAge = moment().diff(selectRows[0].userDOB, 'years');
const payload = {
userID: userID,
userName: selectRows[0].userName,
userDisplayName: selectRows[0].userDisplayName,
userProfilePicURL: selectRows[0].userProfilePicURL,
userRefreshToken: selectRows[0].userRefreshToken,
userAge: userAge,
userGender: selectRows[0].userGender
}
var newToken = jwt.sign(payload, secret, { expiresIn: '21d' });
console.log("new token sent ", newToken)
res.locals.authToken = newToken
console.log("moving to next")
return next()
} else {
console.log("wrong refresh token")
res.json({ errorCode: 405, authResult: false })
}
} else {
console.log("0 results found!")
res.json({ errorCode: 503, authResult: false })
}
connection.release()
})
})
} else {
console.log("moving to next 2")
return next()
}
}
})
}
यह शायद अब तक का सबसे सुंदर कोड नहीं है। इस समय यह मेरा मुद्दा नहीं है - मैं बाद में इसे अनुकूलित करूंगा। अभी मुझे इस बात की चिंता सता रही है कि कई बार दूसरी जांच के बाद भी फंक्शन अटक जाता है। मुझे प्राप्त होने वाला अंतिम आउटपुट "DEC:" है, इसके बाद मेरे कंसोल (लाइन 16) में डिकोडेड टोकन है।
अन्य उपयोगी जानकारी: मैं अपने सर्वर को DigitalOcean से Ubuntu 18.04 सर्वर पर चलाता हूं और इसे चालू रखने के लिए हमेशा के लिए उपयोग करता हूं: forever start --minUptime 1000 --spinSleepTime 1000 server.js
कोई भी जानता है कि ऐसा क्यों हो रहा है?
संपादित करें: टिप्पणी के अनुसार, pool
की परिभाषा
var pool = mysql.createPool({
connectionLimit: 100,
host: process.env.DB_HOST,
user: process.env.DB_USER,
password: process.env.DB_PASS,
database: process.env.DB_BASE,
ssl : {
ca : fs.readFileSync('***********'),
key : fs.readFileSync('*********'),
cert : fs.readFileSync('********'),
},
charset : 'utf8mb4',
dateStrings: true
})
1 उत्तर
मैं नहीं देखता कि pool
को कहीं भी परिभाषित किया गया है। यह सर्वर लॉग में एक त्रुटि फेंक सकता है।
कनेक्शन फ़ंक्शन में एक कंसोल लॉग डालें ताकि यह जांचा जा सके कि यह वास्तव में mySQL से जुड़ा है क्योंकि यह श्रृंखला में अगला फ़ंक्शन है।
संबंधित सवाल
नए सवाल
node.js
Node.js एक घटना-आधारित, गैर-अवरोधक, अतुल्यकालिक I / O रनटाइम है जो Google के V8 जावास्क्रिप्ट इंजन और libuv लाइब्रेरी का उपयोग करता है। इसका उपयोग उन अनुप्रयोगों को विकसित करने के लिए किया जाता है जो क्लाइंट पर और साथ ही सर्वर साइड पर जावास्क्रिप्ट को चलाने की क्षमता का भारी उपयोग करते हैं और इसलिए कोड के पुन: प्रयोज्य और संदर्भ स्विचिंग की कमी से लाभान्वित होते हैं।