【问题标题】:Express res.render is not rendering the pageExpress res.render 没有渲染页面
【发布时间】:2019-02-05 02:18:33
【问题描述】:

我正在尝试从我的主站点获取输入。提交输入后,页面应重定向到/view。似乎它成功重定向到/view(因为console.log() 被触发,但res.render 不起作用。如果我手动转到/view 它正在呈现页面。

这是我的app.js文件的代码:

// load the things we need
var express = require('express');
var app = express();
let bodyParser = require("body-parser");
let article = '';



//Set the view engine to ejs
app.set('view engine', 'ejs');
app.use('/static', express.static('static'))
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json())



//Index page 
app.get('/', function (req, res) {
    res.render('index')
});

//Get the input from the form
app.post('/searcharticle', function (req, res) {
    article = req.body.article;
    res.redirect('/view')
    return article;
});
//Page to output the input
app.get('/view', function (req, res) {
    console.log(article)
    res.render('view', {
        article: article
    })
})

app.listen(8080);
console.log('Server on 8080');

这是我的 folder structure

感谢您的帮助!

【问题讨论】:

  • 有什么错误吗?
  • 没有没有错误输出@mehta-rohan
  • 需要查看您的文件夹结构
  • 我将文件夹结构添加到问题@mehta-rohan
  • 无关:您的代码中有竞争条件,因为您在全局范围内存储了article。请求特定数据不属于全局范围。例如,您可以将req.body.article 存储在会话、文件系统或数据库中。或者直接在你的 POST 处理程序中直接res.render(也不需要从它返回任何东西,因为返回值被丢弃)

标签: javascript node.js express ejs


【解决方案1】:

我的方法是将 ejs 的版本返回到 2.5.2,这样就可以了。不过不知道是什么原因不支持3..

【讨论】:

    【解决方案2】:

    你必须提到布局

    app.get('/', function (req, res) {
        res.render('index',{layout:false})
    });
    

    【讨论】:

      【解决方案3】:

      我的优秀导师刚刚为我解决了一个非常相似的问题。登录表单 'submit' 被传递给 jQuery on('click') 并在经过身份验证后调用 API 调用结果的 Res.Render。 API 调用结果集已启用日志记录,但页面从未呈现,并且没有错误。
      他告诉我 jQuery 充当“影子”DOM,并且 Res.Render 同样发生在该影子 DOM 中。我将登录表单更改为表单 Post 而不是 jQuery on Click。
      那行得通! 我为此工作了几天,没想到 jQuery 会导致这个障碍。

      【讨论】:

        【解决方案4】:

        首先使用视图引擎,然后设置使用它的目录。

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

        对于静态文件使用

        app.use('/static',express.static(PATH.join(__dirname+'/static'));
        

        【讨论】:

        • 我刚刚收到静态文件的app.use 的错误: TypeError: Router.use() requires a middleware function but got a string 它真的需要那个 app.use 用于静态文件吗像那样?我的 css 文件没有问题。
        • 对不起,我忘了使用 express static
        【解决方案5】:

        如果您从 diff 目录而不是静态目录运行服务器,则需要添加相对路径

        app.use('/static', express.static(__dirname+'/static'))

        【讨论】:

        • 但是 css 正在工作,所以我猜静态文件应该没有问题
        【解决方案6】:

        假设您的所有 .ejs 文件都在 views 文件夹中,请尝试在代码中添加这一行:

        const path = require('path'); //npm install -S path in your console to install path. 
        
        //Set the view engine to ejs
        app.set('views', path.join(__dirname, 'views'));  // add this one, change 'views' for your folder name if needed.
        app.set('view engine', 'ejs');
        app.use('/static', express.static('static'))
        app.use(bodyParser.urlencoded({ extended: false }));
        app.use(bodyParser.json())
        

        【讨论】:

        • 我添加了这些行,但它仍然无法正常工作。我得到了相同的结果。
        • 你能分享你的文件夹结构吗?
        • 问题可能在 app.set('views',..)
        • 我在问题底部添加了指向结构的链接
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-13
        相关资源
        最近更新 更多