node.js - 无法使用 Express + jade + Angular 查找 View

标签 node.js angularjs express pug

像我之前的许多人一样,我收到以下错误:

Failed to lookup view "/partials/test" in views directory    "/home/aveline/git/multivision/server/views"

由于我使用 Jade,我的模板通过 app.get 渲染(这是我的 server.js 文件):

var express = require('express'), 
stylus = require('stylus'),
logger = require('morgan'),
bodyParser = require('body-parser');

var env = process.env.NODE_ENV = process.env.NODE_ENV || 'development';

var app = express();

function compile(str, path){
   return stylus(str).set('filename', path);
}

app.set('views', __dirname + '/server/views');
app.set('view engine','jade');
app.use(logger('dev'));
app.use(bodyParser());
app.use(stylus.middleware(
    {
        src: __dirname + '/public',
        compile: compile
    }
));
app.use(express.static(__dirname + '/public'));

app.get('/partials/:partialPath',function(req, res){
    res.render('/partials/' + req.params.partialPath);
});
app.get('*', function(req, res){
    res.render('index');
});

var port = 3030;
app.listen(port);
console.log("Listening on port " + port);

问题是,这个模板“test.jade”实际上位于该目录中。因此,当我转到 localhost:3030 (我监听的端口)时,我收到此错误(全栈):

Error: Failed to lookup view "/partials/test" in views directory "/home/aveline/git/multivision/server/views"
at Function.app.render (/home/aveline/git/multivision/node_modules/express/lib/application.js:485:17)
at ServerResponse.res.render (/home/aveline/git/multivision/node_modules/express/lib/response.js:794:7)
at Object.port [as handle] (/home/aveline/git/multivision/server.js:27:6)
at next_layer (/home/aveline/git/multivision/node_modules/express/lib/router/route.js:113:13)
at Route.dispatch (/home/aveline/git/multivision/node_modules/express/lib/router/route.js:117:5)
at /home/aveline/git/multivision/node_modules/express/lib/router/index.js:222:24
at param (/home/aveline/git/multivision/node_modules/express/lib/router/index.js:307:14)
at param (/home/aveline/git/multivision/node_modules/express/lib/router/index.js:323:14)
at Function.proto.process_params (/home/aveline/git/multivision/node_modules/express/lib/router/index.js:367:3)
at next (/home/aveline/git/multivision/node_modules/express/lib/router/index.js:216:19)

有人可以帮我解决这个问题吗?我在其他线程上尝试了几种其他解决方案,但到目前为止都没有奏效。

如果您需要更多代码示例,请在评论中说明。

编辑:我找到了解决方案,请查看下面的答案。

最佳答案

似乎要解决这个问题,我必须删除 res.render() 位中的部分之前的/。它搜索的完整路径是/home/aveline/git/multivision/server/views//partials/test

解决方案:

app.get('/partials/:partialPath',function(req, res){
    res.render('partials/' + req.params.partialPath);
});

关于node.js - 无法使用 Express + jade + Angular 查找 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24615965/

相关文章:

node.js - 安装项目时"Error: %1 is not a valid Win32 application .. Failed to load c++ bson extension"

javascript - 动态地将 Angular 属性添加到旧的 html 表单

angularjs - 如何防止 ngAnimate 和 ngClass 之间的冲突破坏 DOM?

node.js - 如何将输入数组保存到嵌套 Mongoose 模式中的子模式?

node.js - 如何使用 swagger-express-mw 和 express 上传文件?

javascript - 在 Node js 8 中打印 libuv 线程池大小

node.js - MongoDB ReDOS 测试

node.js - 使用异步 fs.appendFile(file, text, callback) 附加 txt 文件的并行进程是个好主意吗

javascript - 将 url 中的 json 数据存储到 cordova 的数据库中

angular - 在 MEAN 应用程序中使用 passport-facebook 进行 facebook 登录时出现 CORS 错误