res.render() 不渲染 ejs 文件,没有抛出错误 node.js app

Posted

技术标签:

【中文标题】res.render() 不渲染 ejs 文件,没有抛出错误 node.js app【英文标题】:res.render() not rendering ejs file, no error thrown node.js app 【发布时间】:2021-11-13 17:46:32 【问题描述】:

我正在尝试发送一个 ejs 模板文件作为对 HTTP 请求的响应; html 和 css 呈现,但 javascript 没有响应。 Javascript 源链接在 ejs 响应的头部,但在实际显示页面时不会调用函数。

app.js

const express = require('express')
const app = express()
let port = process.env.PORT || 3000
require('dotenv').config()
const  auth,requiresAuth  = require('express-openid-connect')
const path = require('path')
let mysql = require('mysql')
const bodyParser = require('body-parser')
app.use(bodyParser.urlencoded( extended: true ))
app.use(bodyParser.json())
app.set("views", path.join(__dirname, "views"))
app.set("view engine", "ejs")
app.use(express.static(__dirname))
app.set('port',port)

app.get('/createnew', requiresAuth(), function (req, res) 
    let user = (JSON.stringify(req.oidc.user.email))
    user = user.replace(/"/g, '\'');
    let user1 = 
        completeremail: user,
    
    res.render('newform', user : user1)
)

请求来自 profilelist.ejs

function createNew() 
     let getUrl = window.location;
     let baseUrl = getUrl .protocol + "//" + getUrl.host;
     let query = baseUrl + '/createnew?'
     let req = new XMLHttpRequest()
     req.open("GET", query, true)
     req.addEventListener('load', function () 
            let response = req.responseText
            document.querySelector("html").innerHTML = response
        )
     req.send()
    
 

我的文件结构是:

node_modules/
views/
     complete.ejs
     form.ejs
     maintemplate.ejs
     newform.ejs
     profilelist.ejs
.env
.gitignore
app.js
javascript.js
packahe.json
package-lock.json
README.md
stylesheet.css

【问题讨论】:

【参考方案1】:

问题是因为你用空参数调用了你的中间件函数requiresAuth,这意味着你的中间件不会调用next()来将控制权传递给渲染你的ejs模板的下一个函数,尝试在没有()的情况下调用你的中间件

app.get('/createnew', requiresAuth , function (req, res)   
    //your code here
)

【讨论】:

以上是关于res.render() 不渲染 ejs 文件,没有抛出错误 node.js app的主要内容,如果未能解决你的问题,请参考以下文章

ejs-模板

使用 EJS 或 jQuery 设置 HTML 标签的属性

Node.js在发送标题后无法设置标题引入res.render()后出错

Node ejs

使用电子生成器后 EJS 不渲染

使用Nodejs将数据发送到header.ejs