如何禁用快递4中的玉/模板引擎

我是新来expression,我想探索Express的工作。

我正在使用最新版本的express 4 (4.8.1)

我不想使用任何模板引擎。 我想手动提供我的HTML内容。

我怎么做? 我在这里search了几个问题是StackOverflow,我find了一个解决scheme。 我应该做的就是评论以下几行。

 // view engine setup //app.set('views', path.join(__dirname, 'views')); //app.set('view engine', 'jade'); 

但是当我这样做,当我从浏览器中打开我的服务器时,出现以下错误。

 Error: No default engine was specified and no extension was provided. at new View (/Users/adi/Desktop/srserver/node_modules/express/lib/view.js:41:42) at Function.app.render (/Users/adi/Desktop/srserver/node_modules/express/lib/application.js:499:12) at ServerResponse.res.render (/Users/adi/Desktop/srserver/node_modules/express/lib/response.js:955:7) at module.exports (/Users/adi/Desktop/srserver/app.js:50:9) at Layer.handle_error (/Users/adi/Desktop/srserver/node_modules/express/lib/router/layer.js:52:5) at trim_prefix (/Users/adi/Desktop/srserver/node_modules/express/lib/router/index.js:261:13) at /Users/adi/Desktop/srserver/node_modules/express/lib/router/index.js:230:9 at Function.proto.process_params (/Users/adi/Desktop/srserver/node_modules/express/lib/router/index.js:305:12) at /Users/adi/Desktop/srserver/node_modules/express/lib/router/index.js:221:12 at Function.match_layer (/Users/adi/Desktop/srserver/node_modules/express/lib/router/index.js:288:3) 

这是整个代码。 (app.js)

 var express = require('express'); var path = require('path'); var logger = require('morgan'); var cookieParser = require('cookie-parser'); var bodyParser = require('body-parser'); var routes = require('./routes/index'); var users = require('./routes/users'); var app = express(); // view engine setup //app.set('views', path.join(__dirname, 'views')); //app.set('view engine', 'jade'); app.use(logger('dev')); app.use(bodyParser.json()); app.use(bodyParser.urlencoded({extended:true})); app.use(cookieParser()); app.use(express.static(path.join(__dirname, 'public'))); app.use('/', routes); app.use('/users', users); /// catch 404 and forward to error handler app.use(function(req, res, next) { var err = new Error('Not Found'); err.status = 404; next(err); }); /// error handlers // development error handler // will print stacktrace if (app.get('env') === 'development') { app.use(function(err, req, res, next) { res.status(err.status || 500); res.render('error', { message: err.message, error: err }); }); } // production error handler // no stacktraces leaked to user app.use(function(err, req, res, next) { res.status(err.status || 500); res.render('error', { message: err.message, error: {} }); }); module.exports = app; app.listen(3000,function(){ console.log("Listening on #3000"); }); app.get("/",function(req,res){ response.writeHead(200, {'Content-Type': 'text/plain'}); response.write('Simple Simple Fun') response.end(); }); 

另外,我从package.json删除了jade

上面的答案中缺less一件事。

expression关于render调用的投诉,所以你需要做的是:

  1. 正如你所做的那样评论观点(正如杰拉德·辛普森所说的那样)
  2. replace所有render调用:

 res.render('error', { message: err.message, error: err }); 

 res.status(500).json({ message: err.message, error: err }); 

你有两个select:

  1. 使用模板引擎Jade,ejs等。使用res.render的意思是渲染模板
  2. 只使用静态文件和api调用,而不是调用api,并使用从服务器返回的json在客户端呈现您的视图。 res.send({users:[{id:1,name:'adi'},{id:2,name:'dave']});

如果你正在尝试使用像Apache或Nginx的东西,我认为你应该只使用https://github.com/yeoman/generator-webapp

评论这段代码是正确的:

 // view engine setup //app.set('views', path.join(__dirname, 'views')); //app.set('view engine', 'jade'); 

您收到此错误的原因是因为您没有在./public目录中提供文件扩展名的文件。 错误有第二部分说:

没有提供扩展名

您需要为您的快递4服务器服务器静态HTML文件的唯一一段代码是这样的:

 app.use(express.static(path.join(__dirname, 'public'))); 

它告诉你的快递服务器在你的./public目录中查找静态文件。

如果添加./public/index.html,则可以将其作为静态文件提供。

希望这可以帮助

使用以下命令直接发送html文件

  res.sendFile('path/toFile') 

有关该方法的详细信息,也可以参阅api参考 。

这个线程还提到了一些替代方法,比如让express作为静态文件来提供你的html。