【发布时间】:2021-12-30 06:44:52
【问题描述】:
这是给大家的。仅供参考,现在都是本地的。
我正在使用 ejs 构建一个简单的博客站点。每个页面都可以调用并完美加载...除了我的帖子页面。它停止,然后一旦我在终端中输入“rs”来启动它(这应该清除我的帖子数组中的任何信息),它就会呈现!对我来说这没有任何意义,因为它怎么知道在数组被清除后要渲染什么?
我已经检查了几次代码,但我想我会联系你们这些优秀的人来帮助我。
有什么想法吗?
这是我的代码
...
const express = require("express");
const bodyParser = require("body-parser");
const ejs = require("ejs");
const _ = require("lodash");
const app = express();
app.set('view engine', 'ejs');
app.use(bodyParser.urlencoded({extended: true}));
app.use(express.static("public"));
//global post array
let posts =[];
//home logic
app.get("/", function (req, res) {
res.render("home", {
startingContent:homeStartingContent,
posts: posts} );
});
// about logic
app.get("/about", function (req, res) {
res.render("about", {aboutContent:aboutContent});
});
//contact logic
app.get("/contact", function (req, res) {
res.render("contact", {contactContent:contactContent});
});
//compose logic
app.get("/compose", function (req, res){
res.render("compose");
});
app.post('/compose', function(req, res) {
const postContent = {
title: req.body.postTitle,
content: req.body.postBody
};
posts.push(postContent);
res.redirect("/")
});
//Routing Parameters
app.get("/posts/:postName", function(req, res){
const requestedTitle = _.lowerCase(req.params.postName);
posts.forEach(function(post){
const storedTitle = _.lowerCase(post.title);
if (storedTitle === requestedTitle) {
res.render("post", {
title: post.title,
content: post.content
});
};
});
});
app.listen(3000, function() {
console.log("Server started on port 3000");
});
...
我的 post.ejs 代码
...
<%- include('partials/header'); -%>
<h1><%=title%></h1>
<p><%=content%></p>
<%- include('partials/footer'); -%>
..
【问题讨论】:
-
当
storedTitle === requestedTitle是false时会发生什么? -
它将默认为标准错误页面,但让我尝试添加一个 else 语句。也许这会解决它。 :)
-
Dima,我用简单的console.log("No Match Found")添加了一个else语句,结果是一样的。
标签: javascript arrays ejs render