2015-03-26 8 views
8

की संपत्ति 'इंडेक्सऑफ' नहीं पढ़ सकता है, लेकिन मुझे लगता है कि मेरे पास कुछ ऐसा होना चाहिए जो काम करना चाहिए, लेकिन ऐसा नहीं होता है, और मुझे जो त्रुटि मिलती है वह काफी अनुपयोगी है।नोड फेंकता टाइपरर: अपरिभाषित

तो, सिर्फ

var users = require('./routes/users')(app, passport); 

कौन सा स्टार्टअप

> /Users/bengtbjorkberg/.nvm/versions/node/v0.12.0/bin/node app.js Test 
> something 2 
> /Users/bengtbjorkberg/WebstormProjects/goMinute/node_modules/express/lib/router/index.js:130 
> var search = 1 + req.url.indexOf('?'); 
>       ^TypeError: Cannot read property 'indexOf' of undefined 
>  at Function.proto.handle (/Users/bengtbjorkberg/WebstormProjects/goMinute/node_modules/express/lib/router/index.js:130:27) 
>  at router (/Users/bengtbjorkberg/WebstormProjects/goMinute/node_modules/express/lib/router/index.js:35:12) 
>  at Object.<anonymous> (/Users/bengtbjorkberg/WebstormProjects/goMinute/app.js:41:38) 
>  at Module._compile (module.js:460:26) 
>  at Object.Module._extensions..js (module.js:478:10) 
>  at Module.load (module.js:355:32) 
>  at Function.Module._load (module.js:310:12) 
>  at Function.Module.runMain (module.js:501:10) 
>  at startup (node.js:129:16) 
>  at node.js:814:3 
> 
> Process finished with exit code 1 

पर एक गलती फेंकता है स्थापित करने के लिए मार्गों, जो मुझे समझ में होना चाहिए से एक के लिए पासपोर्ट वस्तु भेजने की कोशिश कर अगर मैं एप्लिकेशन को हटाने और पासपोर्ट, समस्या जादुई रूप से गायब हो जाती है। ./routes/users में राउट्स अभी तक उनमें से किसी का भी उपयोग नहीं करते हैं।

मैं कोड

var express = require('express'); 
var path = require('path'); 
var favicon = require('serve-favicon'); 
var logger = require('morgan'); 
var cookieParser = require('cookie-parser'); 
var bodyParser = require('body-parser'); 
var mongoose = require('mongoose'); 
var methodOverride = require('method-override'); // simulate DELETE and PUT (express4) 
var stylus = require('stylus'); 
var nib = require('nib'); 
var morgan = require('morgan'); 

// express session and passport 
var session = require('express-session'); 
var passport = require('passport'); 
var flash = require('connect-flash'); 




var app = express(); 
function compile(str, path) { 
    return stylus(str) 
     .set('filename', path) 
     .use(nib()) 
} 

// view engine setup 
app.set('views', path.join(__dirname, 'views')); 
app.set('view engine', 'jade'); 
var accesslevels = require('./config/accesslevels.js'); 
console.log("Test something " + accesslevels.userRoles.user); 
// required for passport 
app.use(session({ secret: '' + 'asifIwouldtellstackoverflowright', resave: true, saveUninitialized: true })); // session secret 
app.use(passport.initialize()); 
app.use(passport.session()); // persistent login sessions 
app.use(flash()); // use connect-flash for flash messages stored in session 

//Routes after passports 
var routes = require('./routes/index'); 
var users = require('./routes/users')(app, passport); 
var loginsrv = require('./routes/login'); 
var api = require('./routes/api'); 
var partials = require('./routes/partials'); 

var auth = function(req, res, next) { 
    if (!req.isAuthenticated()) 
     res.send(401); 
    else 
     next(); 
    }; 
//See more at: https://vickev.com/#!/article/authentication-in-single-page-applications-node-js-passportjs-angularjs 

// uncomment after placing your favicon in /public 
//app.use(favicon(__dirname + '/public/favicon.ico')); 
app.use(logger('dev')); 
app.use(bodyParser.json()); // get information from html forms 
app.use(bodyParser.urlencoded({ extended: true })); 
app.use(cookieParser()); 
app.use(require('stylus').middleware(path.join(__dirname, 'public'))); 
app.use(express.static(path.join(__dirname, 'public'))); 

app.use('/', routes); 
app.use('/users', users); 
app.use('/partials', partials); 
app.use('/loginsrv', loginsrv); 

//app.use(accesslevels()); 

//console.log(accesslevels); 
// catch 404 and forward to error handler 
app.use(function(req, res, next) { 
    var err = new Error('Not Found'); 
    err.status = 404; 
    next(err); 
}); 

// error handlers 

// development error handler 
// will print stacktrace 
if (app.get('env') === 'development') { 
    app.use(function(err, req, res, next) { 
     res.status(err.status || 500); 
     res.render('error', { 
      message: err.message, 
      error: err 
     }); 
    }); 
} 

// production error handler 
// no stacktraces leaked to user 
app.use(function(err, req, res, next) { 
    res.status(err.status || 500); 
    res.render('error', { 
     message: err.message, 
     error: {} 
    }); 
}); 


module.exports = app; 
app.listen(30010); 

संपादित करें (अच्छे फार्म के लिए पासपोर्ट विन्यास का एक सा निकाला गया) में से कुछ को शामिल किया है: जोड़ा गया मार्गों/users.js

var express = require('express'); 
var router = express.Router(); 

/* GET users listing. */ 
router.get('/', function(req, res, next) { 
    res.send('respond with a resource'); 
}); 

/* 
// route to test if the user is logged in or not 
router.get('/loggedin', function(req, res) { 
    res.send(req.isAuthenticated() ? req.user : '0'); 
}); 

router.post('/login', passport.authenticate('local'), function(req, res) { 
    res.send(req.user); 
}); 

router.post('/logout', function(req, res){ 
    req.logOut(); 
    res.send(200); 
}); 
*/ 

module.exports = router; 

ऊपर कोड मेरे पास में मूल router.get('/', function(req, res, next) को router.get('/', function(app, passport, req, res, next) के साथ बदल दिया जो समस्या का समाधान करता है।

+0

'req' का दायरा क्या है? –

+0

'।/Routes/users.js' में क्या होता है? – mscdex

+0

mscdex, कुछ नहीं, मेरे पास चलाने के लिए कुछ कोड है, लेकिन इस समय सभी ने टिप्पणी की है (क्योंकि इसे मुख्य नोड भाग में कॉन्फ़िगर पासपोर्ट ऑब्जेक्ट की आवश्यकता है)। – vrghost

उत्तर

0
app.get('/api',function(req,res) 
{ 
    if (req.url.indexOf('/api')==0) { 
     console.log('yes i have done it'); 
    } 
}); 

मैं इस को लागू किया है, मुझे लगता है कि अनुरोध है undefined.So नोड इस त्रुटि फेंक रहा है console.What पर उत्पादन अपने कोड में हो रहा है हो रही हूँ ... तुम मेरी कोड हम कर सकते हैं में देख सकते हैं केवल req.url.indexOf विधि का उपयोग केवल तभी करें जब हम req के दायरे में हों (यानी आपको फ़ंक्शन कॉलबैक के अंदर खोज घोषित करनी चाहिए जो req, res ..... को नियंत्रित करता है)

+0

आपको हरप्रीत सिंह का बहुत धन्यवाद, समझने में कुछ समस्या क्यों है। मैं समझता हूं कि रिक उपलब्ध नहीं है, मैं समझ नहीं पा रहा हूं कि यह क्यों और कहाँ उपलब्ध नहीं है। अर्थात। मैं राउटर, ऐप और पासपोर्ट में दो ऑब्जेक्ट भेजता हूं। जब वे राउटर में समाप्त होते हैं, तो रिक उपलब्ध नहीं होता है। जो मैं समझ नहीं पा रहा हूं, यह अब उपलब्ध क्यों नहीं है, या जब मैं उन वस्तुओं को भेजता हूं तो इसे क्यों कहा जाता है, मैंने वास्तविक मार्ग नहीं बदला है, अगर मैं वस्तुओं को नहीं भेजता तो मार्ग काम करता है? (साथ ही, मुझे उपर्युक्त कोड कहां रखना चाहिए, इसे वास्तविक मार्गों से पहले रखना चाहिए और यह काम नहीं करता है।) – vrghost

+0

उस फ़ाइल में आपने ऐप ऑब्जेक्ट का उपयोग करके राउटर ऑब्जेक्ट बनाया है .?if ऐसा नहीं करते हैं जैसे यह = = –

+0

क्षमा करें var राउटर = app.Router() से ऊपर गलत टिप्पणी; फिर उस मार्ग को घोषित करें जिसे आप router.get ('/ abc', फ़ंक्शन (req, res) {var search = req.url.indexOf ('?') का उपयोग करके कार्यान्वित करना चाहते हैं;) या router.post ('/ abc' , फ़ंक्शन (req, res) {var search = req.url.indexOf ('?'); }) –

1

मुझे यकीन नहीं है कि मैं क्यों समझता हूं, लेकिन यह चाल router.get('/', function(req, res, next) को router.get('/', function(app, passport, req, res, next) के साथ बदलना था जो समस्या का समाधान करता था। निश्चित नहीं है कि एक्सप्रेस को ऐसे फ़ंक्शन की आवश्यकता क्यों होती है जो पासपोर्ट और ऐप रखने के लिए पास ऑब्जेक्ट का उपयोग नहीं करती है, लेकिन ऐसा लगता है।

var express = require('express'); 
    var router = express.Router(); 

    /* GET users listing. */ 
    router.get('/', function(app,passport, req, res, next) { 
     res.send('respond with a resource'); 
    }); 

    /* 
    // route to test if the user is logged in or not 
    router.get('/loggedin', function(req, res) { 
     res.send(req.isAuthenticated() ? req.user : '0'); 
    }); 

    router.post('/login', passport.authenticate('local'), function(req, res) { 
     res.send(req.user); 
    }); 

    router.post('/logout', function(req, res){ 
     req.logOut(); 
     res.send(200); 
    }); 
    */ 

    module.exports = router; 
2

शायद ज़रुरत पड़े, यदि आप किसी HTTP क्रिया मार्गों app.get है ('/' ...) app.use के बाद इस्तेमाल किया गया (..) तो आपको यह त्रुटि Express4x में मिल जाएगा।

रेफरी here

संबंधित मुद्दे