为什么我只需要一个视图引擎(jade/pug)就可以使用res.json();

问题描述:

我的服务器上的所有控制器都得到MongoDB的数据并将其发送回角为JSON格式使用res.json(result);为什么我只需要一个视图引擎(jade/pug)就可以使用res.json();

我需要哈巴狗或翡翠等..只是送一个json结果?

如果我没有玉,我得到这个错误:

Error: No default engine was specified and no extension was provided. 

如果我安装玉,然后我得到这个错误:

Failed to lookup view "error" in views directory "G:\Dropbox\ThaiHome\Github\server\views" 

(我没有\意见\文件夹在服务器上,我需要创建发送json吗?)

是否有一个基本的简单方法来设置我的nodejs服务器来解析json到角?

(我已经尝试过,没有运气以下)

// view engine setup 

// app.use(express.static(__dirname + '')); 
// app.engine('html', require('ejs').renderFile); 
// app.set('view engine', 'html'); 
// app.set('views', path.join(__dirname, 'views')); 
// app.set('view engine', 'jade'); 
// app.set('view engine', 'html'); 
// app.set('view engine', 'json'); 

这里是app.js文件

https://www.dropbox.com/s/7ajp2p0qor74z6o/app.js?dl=0

,这里是我的文件夹结构

enter image description here

+0

你还在面对这个问题吗? –

如果您只是呈现HTML,并且您没有 server任何地方,则不需要使用任何视图引擎。

只需使用静态中间件而不是任何视图引擎。

app.use(express.static(__dirname + '/public')); 

我希望所有的静态HTML文件都在public文件夹中。

注意:如果您使用此功能,则您的代码中的任何位置都不得有res.render。因为,res.render需要一个视图引擎,它会抛出一个错误,说没有默认引擎指定,如果你没有。

不要忘了检查你的app.js以及。默认情况下,快速应用错误处理程序使用res.render来呈现错误。

+0

我没有静态HTML文件来从我的节点控制器提供服务。他们所做的就是向调用者提供JSON数据(角度)。但!!出于某种原因,它想要...或者它不会让我抛出错误或有错误。如果我把'app.set('view engine','html')'I get'找不到模块'html',我所需要的就是'没有指定默认引擎并且没有提供扩展'在控制台中有一个很好的错误信息,以防出现错误或发生错误。 – torbenrudgaard

+0

拉维有办法做到这一点,或者我将不得不安装玉/帕格或ejs或巩固和胡须等....或者我必须公开创建一个HTML文件来显示错误或? – torbenrudgaard

+0

你能显示你的项目目录结构吗?另外,试着将所有的html文件保存在公共文件夹中,看看它是否有效。另外,你可以显示你的'app.js'吗?是的!你可以做到这一点没有任何视图引擎 –

确保你的应用程序不是试图渲染一些玉器。 例如像在app.js文件:

app.use((err, req, res, next) => { 
    res.status(err.status || 500); 
    res.render('error', { 
     user: {}, 
     message: err.message, 
     error: {} 
    }); 
}); 

的res.render将尝试呈现在视图文件夹中的文件error.jade。

+0

我到处检查 - 我没有在任何地方使用res.render。我唯一使用的是res.json。那也是玉的一部分吗? – torbenrudgaard

+0

@torbenrudgaard错误是由[错误处理程序](http://expressjs.com/en/guide/error-handling.html)引起的。也许你正在使用应该处理错误的中间件,这取决于模板? – robertklep