在 Express 中使用 Twig 渲染引擎
Using Twig render engine with Express
我决定从使用 slim、php 和 twig 构建我的网站,转而使用 node.js 和 express。
为了减少更改整个过程的冲击,我想继续使用 slim 作为模板引擎,而不是默认的 jade。
我试图更改代码以将渲染引擎更改为 twig,但现在我收到以下错误消息。有谁知道我做错了什么?我不知道为什么它不起作用。任何帮助都会很有帮助。
错误信息:
Error: Failed to lookup view "error" in views directory "/var/www/html/SocialTrackers/app/views"
at Function.render (/var/www/html/SocialTrackers/app/node_modules/express/lib/application.js:580:17)
at ServerResponse.render (/var/www/html/SocialTrackers/app/node_modules/express/lib/response.js:1008:7)
at /var/www/html/SocialTrackers/app/app.js:38:7
at Layer.handle_error (/var/www/html/SocialTrackers/app/node_modules/express/lib/router/layer.js:71:5)
at trim_prefix (/var/www/html/SocialTrackers/app/node_modules/express/lib/router/index.js:315:13)
at /var/www/html/SocialTrackers/app/node_modules/express/lib/router/index.js:284:7
at Function.process_params (/var/www/html/SocialTrackers/app/node_modules/express/lib/router/index.js:335:12)
at next (/var/www/html/SocialTrackers/app/node_modules/express/lib/router/index.js:275:10)
at Layer.handle_error (/var/www/html/SocialTrackers/app/node_modules/express/lib/router/layer.js:67:12)
at trim_prefix (/var/www/html/SocialTrackers/app/node_modules/express/lib/router/index.js:315:13)
这是我目前的代码运行。除了使用 twig 作为渲染引擎进行的更改外,我没有对初始快速安装进行任何其他更改。
app.js
var createError = require('http-errors');
var twig = require("twig");
var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
var logger = require('morgan');
var indexRouter = require('./routes/index');
var usersRouter = require('./routes/users');
var app = express();
// view engine setup
app.set('views', path.join(__dirname, './views'));
app.set('view engine', 'twig');
app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
app.use('/bootstrap', express.static(__dirname + '/node_modules/bootstrap/dist/'))
app.use('/', indexRouter);
app.use('/users', usersRouter);
// catch 404 and forward to error handler
app.use(function(req, res, next) {
next(createError(404));
});
// error handler
app.use(function(err, req, res, next) {
// set locals, only providing error in development
res.locals.message = err.message;
res.locals.error = req.app.get('env') === 'development' ? err : {};
// render the error page
res.status(err.status || 500);
res.render('error');
});
module.exports = app;
另外我是下面的文件结构(默认express)
app
--bin
--node_modules
--public
--routes
----index.js
----users.js
--views
----error.twig
----index.twig
----landingpage.twig
--app.js
我花了几天时间才弄明白这一点。
正如我所说,我是 Nodejs 的新手,所以我相信我犯了一个非常菜鸟的错误。我想我会 post 解决方案,以防其他人遇到这个问题。
我在 ec2 实例上 运行 连接节点服务器。当我更新代码时,我发现我也必须重新启动节点服务器。
我一直在使用 pm2 来保持服务器 运行ning,所以对我来说,解决方案是 运行 以下命令。
pm2 restart [namespace of server]
注意:对我来说,我从来没有给服务器命名空间,所以它只是 'default'。如果您不知道命名空间,可以通过 运行ning 'pm2 list'
找到它
pm2 restart default
我决定从使用 slim、php 和 twig 构建我的网站,转而使用 node.js 和 express。
为了减少更改整个过程的冲击,我想继续使用 slim 作为模板引擎,而不是默认的 jade。
我试图更改代码以将渲染引擎更改为 twig,但现在我收到以下错误消息。有谁知道我做错了什么?我不知道为什么它不起作用。任何帮助都会很有帮助。
错误信息:
Error: Failed to lookup view "error" in views directory "/var/www/html/SocialTrackers/app/views" at Function.render (/var/www/html/SocialTrackers/app/node_modules/express/lib/application.js:580:17) at ServerResponse.render (/var/www/html/SocialTrackers/app/node_modules/express/lib/response.js:1008:7) at /var/www/html/SocialTrackers/app/app.js:38:7 at Layer.handle_error (/var/www/html/SocialTrackers/app/node_modules/express/lib/router/layer.js:71:5) at trim_prefix (/var/www/html/SocialTrackers/app/node_modules/express/lib/router/index.js:315:13) at /var/www/html/SocialTrackers/app/node_modules/express/lib/router/index.js:284:7 at Function.process_params (/var/www/html/SocialTrackers/app/node_modules/express/lib/router/index.js:335:12) at next (/var/www/html/SocialTrackers/app/node_modules/express/lib/router/index.js:275:10) at Layer.handle_error (/var/www/html/SocialTrackers/app/node_modules/express/lib/router/layer.js:67:12) at trim_prefix (/var/www/html/SocialTrackers/app/node_modules/express/lib/router/index.js:315:13)
这是我目前的代码运行。除了使用 twig 作为渲染引擎进行的更改外,我没有对初始快速安装进行任何其他更改。
app.js
var createError = require('http-errors');
var twig = require("twig");
var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
var logger = require('morgan');
var indexRouter = require('./routes/index');
var usersRouter = require('./routes/users');
var app = express();
// view engine setup
app.set('views', path.join(__dirname, './views'));
app.set('view engine', 'twig');
app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
app.use('/bootstrap', express.static(__dirname + '/node_modules/bootstrap/dist/'))
app.use('/', indexRouter);
app.use('/users', usersRouter);
// catch 404 and forward to error handler
app.use(function(req, res, next) {
next(createError(404));
});
// error handler
app.use(function(err, req, res, next) {
// set locals, only providing error in development
res.locals.message = err.message;
res.locals.error = req.app.get('env') === 'development' ? err : {};
// render the error page
res.status(err.status || 500);
res.render('error');
});
module.exports = app;
另外我是下面的文件结构(默认express)
app
--bin
--node_modules
--public
--routes
----index.js
----users.js
--views
----error.twig
----index.twig
----landingpage.twig
--app.js
我花了几天时间才弄明白这一点。
正如我所说,我是 Nodejs 的新手,所以我相信我犯了一个非常菜鸟的错误。我想我会 post 解决方案,以防其他人遇到这个问题。
我在 ec2 实例上 运行 连接节点服务器。当我更新代码时,我发现我也必须重新启动节点服务器。
我一直在使用 pm2 来保持服务器 运行ning,所以对我来说,解决方案是 运行 以下命令。
pm2 restart [namespace of server]
注意:对我来说,我从来没有给服务器命名空间,所以它只是 'default'。如果您不知道命名空间,可以通过 运行ning 'pm2 list'
找到它pm2 restart default