从命令行不能在节点上安装句柄

我一直试图让handlebars使用节点工作。 我的书指示我安装这样的npm install --save express3-handlebarnpm install --save express3-handlebar 。 那扔了一个错误

npm WARN deprecated express3-handlebars @0.5.2: THIS PACKAGE HAS BEEN RENAMED TO: express-handlebars

所以我试着npm install --save express-handlebar

当我试图启动服务器node meadowlark.js ,命令提示符显示Express started on....

但是当我把本地主机放入浏览器时,我收到了以下内容:

 Error: No default engine was specified and no extension was provided. at new View (C:\Users\myUserName\Desktop\project\meadowlark\site\node_modules\express\lib\view.js:48:42) at EventEmitter.app.render (C:\Users\myUserName\Desktop\project\meadowlark\site\node_modules\express\lib\application.js:509:12) at ServerResponse.res.render (C:\Users\myUserName\Desktop\project\meadowlark\site\node_modules\express\lib\response.js:904:7) at require.create.defaultLayout (C:\Users\myUserName\Desktop\project\meadowlark\site\meadowlark.js:20:6) at Layer.handle_error (C:\Users\myUserName\Desktop\project\meadowlark\site\node_modules\express\lib\router\layer.js:58:5) at trim_prefix (C:\Users\myUserName\Desktop\project\meadowlark\site\node_modules\express\lib\router\index.js:269:13) at C:\Users\myUserName\Desktop\project\meadowlark\site\node_modules\express\lib\router\index.js:238:9 at Function.proto.process_params (C:\Users\myUserName\Desktop\project\meadowlark\site\node_modules\express\lib\router\index.js:313:12) at C:\Users\myUserName\Desktop\project\meadowlark\site\node_modules\express\lib\router\index.js:229:12 at Function.match_layer (C:\Users\myUserName\Desktop\project\meadowlark\site\node_modules\express\lib\router\index.js:296:3) 

然后我注意到我的索引文件中还有

 var app = express(); // set up handlebars view engine var handlebars = require('express3-handlebars') .create({ defaultLayout:'main' }); app.engine('handlebars', handlebars.engine); app.set('view engine', 'handlebars'); 

所以我改变了从第三行删除3 。 还是一样长的错误。 我有什么错误来接收这个错误? 当我做把手安装时,我不在正确的目录中吗? 我已经尝试从我的应用程序根目录,其中包含我的index.js

 var express = require('express'); var app = express(); app.set('port', process.env.PORT || 3000); app.get('/', function(req, res) { res.render('home'); }); app.get('/about', function(req, res) { res.render('about'); }); // 404 catch-all handler (middleware) app.use(function(req, res, next){ res.status(404); res.render('404'); }); // 500 error handler (middleware) app.use(function(err, req, res, next){ console.error(err.stack); res.status(500); res.render('500'); }); app.listen(app.get('port'), function() { console.log('Express started on http://localhost:' + app.get('port') + '; press Ctrl-C to terminate.'); }); var app = express(); // set up handlebars view engine var handlebars = require('express3-handlebars') .create({ defaultLayout:'main' }); app.engine('handlebars', handlebars.engine); app.set('view engine', 'handlebars'); 

我正在使用的例子是来自Web Development with Node&Express (Ethan Brown)。

我在代码中看到的主要问题是您正在创build两个app实例:

 var app = express(); // I see this line twice in your code 

这意味着你正在configuration你的应用程序的错误实例的句柄,因此"No default engine was specified"

如果你删除第二个实例,你应该是金。 以下是我将如何重写该代码的一个示例:

 var express = require('express'); var app = express(); var handlebars = require('express-handlebars') .create({ defaultLayout:'main' }); app.engine('handlebars', handlebars.engine); app.set('view engine', 'handlebars'); app.set('port', 3000); app.get('/', function(req, res) { res.render('home'); }); app.get('/about', function(req, res) { res.render('about'); }); // 404 catch-all handler (middleware) app.use(function(req, res, next){ res.status(404); res.render('404'); }); // 500 error handler (middleware) app.use(function(err, req, res, next){ console.error(err.stack); res.status(500); res.render('500'); }); app.listen(app.get('port'), function() { console.log('Express started on http://localhost:' + app.get('port') + '; press Ctrl-C to terminate.'); }); 

你可以在你的require语句中使用和不使用3 ,但是它应该可以工作。

希望这可以帮助!!!