我之前看别人的代码用res.sendFile实现一个get方法的页面显示,他用的express 3.x 现在我用res.sendFile,(我的是express 4.x)但是却出现错误( Failed to lookup view “error” in views directory……) 后面改用res.render就行了,请问一下有什么区别?
============================app.js中写的是这样的: //其余代码省略 var ejs =require(‘ejs’); var routes = require(’./routes/index’); //其余代码省略 app.set(‘views’, __dirname + ‘\\views’); app.engine(’.html’, ejs.__express); app.set(‘view engine’, ‘html’); //其余代码省略 app.get(’/’, routes.hello);
=============================routes/index.js var express = require(‘express’); exports.hello = function(req, res){ res.render(‘index.html’, {title:‘index’}); }
===========================views/index.html
<html> <% include head.html %> <%= title %> hello world111111 </html>@gjc9620 app.engine(’.html’, ejs.__express); app.set(‘view engine’, ‘html’); 也就只是这样写的,应该不算是ejs模板吧。。。 而且我发现如果把文件放在public下面就可以sendFile,然而在views下面就无法sendFile。 真的搞不懂。。。
@giscafer app.set(‘views’, __dirname + ‘\views’); app.engine(’.html’, ejs.__express); app.set(‘view engine’, ‘html’);
也就这样写的,在views文件夹里的html文件确实没办法sendFile,但是弄到public中就可以sendFile。。。 真的感觉挺怪的
http://expressjs.com/en/4x/api.html#res.sendFile Transfers the file at the given path. Sets the Content-Type response HTTP header field based on the filename’s extension. Unless the root option is set in the options object, path must be an absolute path to the file. 这个是直接发送文件的意思,比如说给客户端发一个 rar 文件,图片,html什么的都可以,
http://expressjs.com/en/4x/api.html#res.render Renders a view and sends the rendered HTML string to the client. Optional parameters: 这个是渲染模板并输出的意思,也就是针对views下面的模板文件进行组合生成html然后发送给客户端
@klesh 这么说来的话,如果是要实现页面显示首选render咯?我试了一下sendFile发送一个zip文件依然错误,状态是500.但是用download就可以实现。。。真的是越来越看不懂sendFile了。。。