JS,Express:无论是否遵循指南,都无法在目录中查找视图

问题描述 投票:1回答:3

我遵循这个指南:https://appdividend.com/2017/06/18/node-js-express-tutorial/

做了很多研究,但不知何故不能让它发挥作用。

我的文件夹结构:enter image description here

我的代码:

// app.js

var express = require('express');
var app = express();
var port = 3000;

app.use(express.static('public'));

app.listen(port, function(){
  console.log('Server is running on port:', port);
})
app.get('/', function(req, res){
    res.send('Hello Express');
});


app.set('view engine', 'ejs');

var itemRouter = express.Router();

app.use('/items', itemRouter);

itemRouter.route('/').get(function (req, res) {
  res.render('items');
});

itemRouter.route('/single').get(function (req, res) {
  res.render('singleItem');
});

我的输出:

Error: Failed to lookup view "items" in views directory "C:\Users\Karol\views"
    at Function.render (C:\Users\Karol\node_modules\express\lib\application.js:580:17)
    at ServerResponse.render (C:\Users\Karol\node_modules\express\lib\response.js:1008:7)
    at C:\Users\Karol\Desktop\CB\app.js:27:7
    at Layer.handle [as handle_request] (C:\Users\Karol\node_modules\express\lib\router\layer.js:95:5)
    at next (C:\Users\Karol\node_modules\express\lib\router\route.js:137:13)
    at Route.dispatch (C:\Users\Karol\node_modules\express\lib\router\route.js:112:3)
    at Layer.handle [as handle_request] (C:\Users\Karol\node_modules\express\lib\router\layer.js:95:5)
    at C:\Users\Karol\node_modules\express\lib\router\index.js:281:22
    at Function.process_params (C:\Users\Karol\node_modules\express\lib\router\index.js:335:12)
    at next (C:\Users\Karol\node_modules\express\lib\router\index.js:275:10)

这是我访问localhost:port/items时获得的(用实际端口号替换端口)。

javascript express
3个回答
0
投票

解决views路径存在问题。快递后尝试要求path模块

var express = require('express');
var path = require('path');
var app = express();
var port = 3000;

并在设置ejs模板后添加:

app.set('view engine', 'ejs');
app.set('views', path.resolve(__dirname, 'views'));

0
投票

替换:

app.use('/items', itemRouter);

itemRouter.route('/').get(function (req, res) {
  res.render('items');
});

itemRouter.route('/single').get(function (req, res) {
  res.render('singleItem');
});

通过:

itemRouter.route('/items/').get(function (req, res) {
  res.render('items');
});

itemRouter.route('/items/single').get(function (req, res) {
  res.render('singleItem');
});

0
投票
var path = require('path');

尝试这样设置公共目录,如下所示。

app.set('view_engine', 'ejs');
app.set('views', path.join(__dirname,'/views'))

它将获取项目目录并设置视图路径。

© www.soinside.com 2019 - 2024. All rights reserved.