Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 无法运行Node.js应用程序,因为:';查找视图失败";“错误”;在视图目录';_Javascript_Node.js_Angular_Passport.js - Fatal编程技术网

Javascript 无法运行Node.js应用程序,因为:';查找视图失败";“错误”;在视图目录';

Javascript 无法运行Node.js应用程序,因为:';查找视图失败";“错误”;在视图目录';,javascript,node.js,angular,passport.js,Javascript,Node.js,Angular,Passport.js,我正在做以下教程: 然后,我一直在创建这个项目(我正在使用windows10): 但在浏览器上打开网站时,请转到: 我得到以下错误: Error: Failed to lookup view "error" in views directory "D:\wamp64\www\ionic2\stackoverflow-question\views" at EventEmitter.render (D:\wamp64\www\ionic2\stackoverflow-question\no

我正在做以下教程:

然后,我一直在创建这个项目(我正在使用
windows10
):

但在浏览器上打开网站时,请转到:

我得到以下错误:

Error: Failed to lookup view "error" in views directory "D:\wamp64\www\ionic2\stackoverflow-question\views"
    at EventEmitter.render (D:\wamp64\www\ionic2\stackoverflow-question\node_modules\express\lib\application.js:580:17)
    at ServerResponse.render (D:\wamp64\www\ionic2\stackoverflow-question\node_modules\express\lib\response.js:971:7)
    at D:\wamp64\www\ionic2\stackoverflow-question\app.js:153:9
    at Layer.handle_error (D:\wamp64\www\ionic2\stackoverflow-question\node_modules\express\lib\router\layer.js:71:5)
    at trim_prefix (D:\wamp64\www\ionic2\stackoverflow-question\node_modules\express\lib\router\index.js:315:13)
    at D:\wamp64\www\ionic2\stackoverflow-question\node_modules\express\lib\router\index.js:284:7
    at Function.process_params (D:\wamp64\www\ionic2\stackoverflow-question\node_modules\express\lib\router\index.js:335:12)
    at IncomingMessage.next (D:\wamp64\www\ionic2\stackoverflow-question\node_modules\express\lib\router\index.js:275:10)
    at done (D:\wamp64\www\ionic2\stackoverflow-question\node_modules\express\lib\response.js:966:25)
    at EventEmitter.render (D:\wamp64\www\ionic2\stackoverflow-question\node_modules\express\lib\application.js:582:14)
    at ServerResponse.render (D:\wamp64\www\ionic2\stackoverflow-question\node_modules\express\lib\response.js:971:7)
    at D:\wamp64\www\ionic2\stackoverflow-question\app.js:127:9
    at Layer.handle [as handle_request] (D:\wamp64\www\ionic2\stackoverflow-question\node_modules\express\lib\router\layer.js:95:5)
    at next (D:\wamp64\www\ionic2\stackoverflow-question\node_modules\express\lib\router\route.js:137:13)
    at isLoggedIn (D:\wamp64\www\ionic2\stackoverflow-question\app.js:123:5)
    at Layer.handle [as handle_request] (D:\wamp64\www\ionic2\stackoverflow-question\node_modules\express\lib\router\layer.js:95:5)
这是文件的源代码:
app.js

var express = require('express');
var exphbs = require('express-handlebars');
var user = require('./models/user');
var credentials = require('./credentials.json');
var passport = require('passport');
var TwitterStrategy = require('passport-twitter').Strategy;
var FacebookStrategy = require('passport-facebook').Strategy;
var CookieParser = require('cookie-parser');
var ExpressSession = require('express-session');
var mongoose = require('mongoose');

passport.use(new FacebookStrategy({
    clientID: credentials.facebook.app_id,
    clientSecret: credentials.facebook.app_secret,
    callbackURL: credentials.facebook.callback,
    profileFields:['id','displayName','emails']
    }, function(accessToken, refreshToken, profile, done) {
        console.log(profile);
        var me = new user({
            email:profile.emails[0].value,
            name:profile.displayName
        });

        /* save if new */
        user.findOne({email:me.email}, function(err, u) {
            if(!u) {
                me.save(function(err, me) {
                    if(err) return done(err);
                    done(null,me);
                });
            } else {
                console.log(u);
                done(null, u);
            }
        });
  }
));

passport.use(new TwitterStrategy({
    consumerKey: credentials.twitter.consumer_key,
    consumerSecret: credentials.twitter.consumer_secret,
    callbackURL: credentials.twitter.callback,
    includeEmail:true
  },
  function(token, tokenSecret, profile, done) {

        var me = new user({
            email:profile.emails[0].value,
            name:profile.displayName
        });

        /* save if new */
        user.findOne({email:me.email}, function(err, u) {
            if(!u) {
                me.save(function(err, me) {
                    if(err) return done(err);
                    done(null,me);
                });
            } else {
                console.log(u);
                done(null, u);
            }
        });

  }
));

passport.serializeUser(function(user, done) {
    console.log(user);
    done(null, user._id);
});

passport.deserializeUser(function(id, done) {
    user.findById(id, function(err, user) {
        done(err, user);
    });
});

var app = express();
app.use(CookieParser(credentials.cookieSecret));
app.use(ExpressSession({
    resave:false,
    saveUninitialized:false,
    secret:credentials.cookieSecret
}));

app.use(passport.initialize());
app.use(passport.session());

app.engine('handlebars', exphbs({
    defaultLayout:'main'
}));
app.set('view engine', 'handlebars');

var opts = {
    server: {
        socketOptions: { keepAlive: 1 }
    }
};

switch(app.get('env')) {
    case 'development':
        mongoose.connect(credentials.mongo.development.connectionString, opts);
        break;
    case 'production':
        mongoose.connect(credentials.mongo.production.connectionString, opts);
        break;
    default:
        throw new error('Unknown execution environment: ', app.get('env'));
}

app.set('port', process.env.PORT || 4000);
app.use(express.static(__dirname + '/public'));

function isLoggedIn(req, res, next) {
    req.loggedIn = !!req.user;
    next();
}

app.get('/', isLoggedIn, function(req, res) {
    res.render('index', {
        title:'Welcome to Fool',
        loggedIn:req.loggedIn
    });
});

app.get('/auth/facebook', passport.authenticate('facebook', {scope:"email"}));
app.get('/auth/facebook/callback', passport.authenticate('facebook', 
{ successRedirect: '/', failureRedirect: '/login' }));

app.get('/auth/twitter', passport.authenticate('twitter', {scope:['include_email=true']}));
app.get('/auth/twitter/callback', passport.authenticate('twitter', 
  { successRedirect: '/', failureRedirect: '/login' }));

app.get('/login', isLoggedIn, function(req, res) {
    if(req.loggedIn) res.redirect('/');
    console.log(req.loggedIn);
    res.render('login', {
        title:'Login/Registration'
    });
});

// 500 error handler (middleware)
app.use(function(err, req, res, next){
    console.error(err.stack);
    res.status(500);
    res.render('error');
});

app.listen(app.get('port'), function() {
    console.log('Express running on http://localhost:' + app.get('port'));
});
关于如何使这段代码(来自上面的教程)工作,你有什么想法吗


现在我需要解决上面的错误。

这似乎是因为您从中获取代码的存储库不包含任何HTML文件/模板,也不注册任何应该从中加载模板的目录

此外,如果您查看从以下位置克隆的存储库:,您将看到相同的错误作为错误提交到该存储库中

因此,在这方面,它可能还不是一个准备好运行的服务器。通常,您会有一个
视图
子目录,然后使用如下内容:

app.set('views', path.join(__dirname, "views"));

注册它的位置。然后,您将在该目录中设置模板。

在哪里设置视图目录,如
app.set('views',somePath)中所示。我没有看到与我在文章中引用的教程类似的句子。你有合适的例子吗?。我只是想让这个教程起作用。
app.set('views', path.join(__dirname, "views"));