在 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