0
我嘗試使用護照登錄的NodeJS教程。當c9.ioexpress4護照desirializeuser類型錯誤:十六進制不是一個函數
託管但是,openshift託管它使錯誤
TypeError: hex is not a function
at Function.from (native)
at Function.from (native)
at new ObjectID (/opt/app-root/src/node_modules/mongodb/node_modules/mongodb-core/node_modules/bson/lib/bson/objectid.js:52:32)
at ObjectID (/opt/app-root/src/node_modules/mongodb/node_modules/mongodb-core/node_modules/bson/lib/bson/objectid.js:31:42)
at /opt/app-root/src/app.js:120:17
at pass (/opt/app-root/src/node_modules/passport/lib/authenticator.js:347:9)
at Authenticator.deserializeUser (/opt/app-root/src/node_modules/passport/lib/authenticator.js:352:5)
at SessionStrategy.authenticate (/opt/app-root/src/node_modules/passport/lib/strategies/session.js:53:28)
at attempt (/opt/app-root/src/node_modules/passport/lib/middleware/authenticate.js:348:16)
at authenticate (/opt/app-root/src/node_modules/passport/lib/middleware/authenticate.js:349:7)
at Layer.handle [as handle_request] (/opt/app-root/src/node_modules/express/lib/router/layer.js:95:5)
at trim_prefix (/opt/app-root/src/node_modules/express/lib/router/index.js:312:13)
at /opt/app-root/src/node_modules/express/lib/router/index.js:280:7
at Function.process_params (/opt/app-root/src/node_modules/express/lib/router/index.js:330:12)
at next (/opt/app-root/src/node_modules/express/lib/router/index.js:271:10)
at initialize (/opt/app-root/src/node_modules/passport/lib/middleware/initialize.js:53:5)
我deserializeUser代碼是這樣的
var express = require("express"),
app = express(),
cookieParser = require("cookie-parser"),
bodyParser = require('body-parser'),
assert = require('assert'),
fs = require("fs"),
XLSX = require("xlsx"),
session = require('express-session'),
MongoStore = require('connect-mongo')(session),
multer = require("multer"),
passport = require('passport'),
LocalStrategy = require('passport-local').Strategy,
mongodb = require('mongodb'),
ObjectId = require('mongodb').ObjectId;
passport.serializeUser(function(user, done) {
console.log("serialize:%s",user._id);
done(null, user._id);
});
passport.deserializeUser(function(id, done) {
if (!db) {
initDb(function(err){});
}
if (db){
var col = db.collection("users");
col.findOne(ObjectId(id), function(err, user) {
console.log("deserialize:%s",user.username);
return done(err, user);
});
}
});
線(/選擇
deserializeUser運作良好/app-root/src/app.js:120:17)是
col.findOne(ObjectId(id), function(err, user) {
我認爲函數ObjectId不能在切換環境下工作
這是一個錯誤嗎?爲什麼在c9.io上工作,而不是在openshift上?
我也有同樣的問題。你找到了解決方案嗎? –
您可以嘗試在較新的節點版本上覆制問題嗎?對我們來說,每當我們嘗試5.12.0或6.6.0時它就會消失,而我們在節點5.7.1上得到相同的錯誤。 – Lukx
所以我遇到了同樣的問題。我發現升級我的節點有竅門。你使用什麼版本? –