node.js - 错误:未指定默认引擎,节点服务器中未提供扩展
问题描述
我使用 nodejs 作为后端服务器,而我的前端是有角度的。我需要调用注册路由器,为此我在 json fromat 中从前端发送数据,这是完美的,但由于我试图在这里进行护照身份验证,我从另一个 github 存储库获取护照身份验证代码,其中节点也在使用引擎所以这就是为什么 res.render 在其中使用。但是现在我发现很难从注册路由器中删除这个特定的行,如果我尝试删除它或者只是使用res.sendStatus(500)
它仍然不起作用,我得到 500 错误。这个问题的解决方案是什么?
var express = require('express');
var mongoose = require('mongoose');
var bodyparser = require('body-parser');
var cors = require('cors');
var session = require('cookie-session');
var flash = require('connect-flash');
var passport = require('passport');
var bcrypt = require('bcryptjs');
require('./config/passport')(passport);
var User = require('./models/User');
var app = express();
app.use(bodyparser.json());
app.use(cors());
var expiryDate = new Date(Date.now() + 60 * 60 * 1000) // 1 hour
app.use(session({
name: 'session',
keys: ['key1', 'key2'],
cookie: {
secure: true,
httpOnly: true,
domain: 'example.com',
path: 'foo/bar',
expires: expiryDate
}
}))
app.set('port', process.env.port || 3000);
app.use(passport.initialize());
app.use(passport.session());
// Connect flash
app.use(flash());
// Global variables
app.use(function(req, res, next) {
res.locals.success_msg = req.flash('success_msg');
res.locals.error_msg = req.flash('error_msg');
res.locals.error = req.flash('error');
next();
});
var db = mongoose.connect("mongodb://localhost:27017/server", {
useNewUrlParser: true
}, function(err, response) {
if (err) {
console.log('There is error in connecting with mongodb');
}
console.log('Connection has been established.');
});
app.get('/', (req, res) => {
res.send("hello");
});
//Trying registering with passport
app.post('/register', (req, res) => {
console.log(req.body);
const { firstname, lastname, email, password } = req.body;
let errors = [];
if (errors.length > 0) {
res.render('register', {
errors,
name,
email,
password,
password2
});
} else {
User.findOne({ email: email }).then(user => {
if (user) {
errors.push({ msg: 'Email already exists' });
res.render('register', {
errors,
firstname,
lastname,
email,
password
});
} else {
const newUser = new User({
firstname,
lastname,
email,
password
});
bcrypt.genSalt(10, (err, salt) => {
bcrypt.hash(newUser.password, salt, (err, hash) => {
if (err) throw err;
newUser.password = hash;
newUser
.save()
.then(user => {
req.flash(
'success_msg',
'You are now registered and can log in'
);
res.redirect('/login');
})
.catch(err => console.log(err));
});
});
}
})
.catch(err => console.log(err))
}
});
//end
app.post('/login', (req, res, next) => {
console.log(req.body);
passport.authenticate('local', {
successRedirect: '/dashboard',
failureRedirect: '/login',
failureFlash: true
})(req, res, next);
});
app.listen(app.get('port'), function(err, response) {
console.log("Server is running");
});
解决方案
您res.render()
在 app.post('/register', callback) 的回调函数中使用。如果res.render()
被调用,它将查找模板(可能在视图目录中)。如果您没有指定使用哪个引擎,您将收到该错误。
推荐阅读
- php - 创建时需要 Laravel 请求验证图像,但更新时不需要
- python - 如何在 Jupyter notebook 中找到函数的定义?
- firebase - 使用firebase在应用程序消息中进行地理定位?
- javascript - Angular Routes:定义具有多个路由文件的 NotFoundComponent 时出现问题
- ios - 未调用 UICollectionView 的数据函数
- android - 如何为电话验证创建国家代码下拉列表?
- javascript - 无法使用过滤器打开 URL
- c++ - 无法访问模板类中的好友功能
- python - 预测模型仅在保留集 keras 上提供一类
- markdown - 在markdown中显示带有“>”字符的代码示例作为项目符号段落的一部分