【问题标题】:In Node.js, res.render is returning a 404 error on router.get在 Node.js 中,res.render 在 router.get 上返回 404 错误
【发布时间】:2017-12-07 06:47:55
【问题描述】:

我正在构建我的第一个 Node 应用程序,但在使用 GET 请求显示我想要的页面时遇到了一些问题。我已经安装了 ejs(欢迎对此发表意见!)所以我的理解是我不需要定义“views”文件夹。到目前为止,这是我的路线文件:

const express = require('express');
const router = express.Router();
const Event = require('../models/event')

router.get('/'), function(req, res, next){
   /* Event.find({}).then(function(events){
       res.send(events);
   });
    });*/
    res.render('../../index');
 };

router.post('/events', (req, res) => {
    Event.create(req.body);
    res.send({type: POST})
});


module.exports = router;

数据库连接正常,我可以通过我在 get 请求中注释掉的代码看到这一点。但由于某种原因,我无法呈现我的索引文件。我的文件结构如下:

文件树:

所以我需要上两层,对吗?我尝试了 index、index.ejs、../index、views/index,但没有任何效果。我做错了什么?

编辑:这是我的 server.js:

const express = require('express');
const app = express();
const bodyParser = require('body-parser');
const mongoose = require('mongoose');
const routes = require('./routes/index');
var path = require("path");

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

app.use(bodyParser.json());
app.use(express.static('public'));
app.use(routes);
app.use(bodyParser.urlencoded({extended: true}))

mongoose.connect('mongodb://junk:junk@ds141242.mlab.com:41242/alaska-events');


app.listen(3000, () => {
    console.log('listening on 3000')
  });

【问题讨论】:

  • 嗯,也许您需要设置 app.set('views', path.join(__dirname, 'views')); 以便知道您的视图文件夹位置,并且您不需要知道上下多少级才能找到它。
  • 添加:app.set('view engine', 'ejs');在你 server.js 中
  • Paolo,对不起,我应该指定我已经为 ejs 设置了视图引擎。安迪,我添加了你所说的内容并定义了var path = require("path");,因为我收到了一个错误(“ReferenceError:路径未定义”)。还是没有运气。
  • 永远不要把凭据放在这里!!

标签: javascript node.js express routes ejs


【解决方案1】:

感谢大家的帮助,原来只是一个错字。 router.get('/'), function(req, res, next) 应该是 router.get('/', function(req, res, next)

【讨论】:

    【解决方案2】:

    views 文件夹直接放在根文件夹中,使用我们 app.set('views', path.join(__dirname, 'views'));将其指向视图文件夹。所以在渲染中直接提到视图名称。

    router.get('/', function(req, res, next){
       res.render('index');
    });
    

    【讨论】:

    • 你的意思是像router.get('/', function(req, res, next){ res.render('views/index'); });这样我也试过了
    • 它只是 res.render('index'); .........不像我们已经提到的路径那样在设置路径中查看“视图/索引”。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-14
    • 1970-01-01
    • 2022-11-04
    • 2016-03-10
    • 2020-05-02
    • 2013-05-13
    • 2021-03-31
    相关资源
    最近更新 更多