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"));