2017-01-08 18 views
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上?

+1

我也有同樣的問題。你找到了解決方案嗎? –

+0

您可以嘗試在較新的節點版本上覆制問題嗎?對我們來說,每當我們嘗試5.12.0或6.6.0時它就會消失,而我們在節點5.7.1上得到相同的錯誤。 – Lukx

+0

所以我遇到了同樣的問題。我發現升級我的節點有竅門。你使用什麼版本? –

回答

0

今天我得到了一些MongoDB的核心更新相關的類似的錯誤。

我固定它通過強制MongoDB的核心到以前的版本我有:

npm install --save [email protected] 
+0

謝謝我通過'npm update'解決了這個問題, –