无法从命令行在节点上安装把手

Cannot install handlebars on Node from command line

本文关键字:安装 节点 命令行      更新时间:2023-09-26

我一直在尝试让手把使用node。我的书指示我安装这样的车把:npm 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....

但当我将localhost放入浏览器时,我收到了以下消息:

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');

我正在使用的示例来自Node&Express(伊桑·布朗)。

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

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

这意味着你在应用程序的错误实例上配置了把手,因此"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,但无论哪种方式都应该有效。

希望这能有所帮助!!!