繁体   English   中英

console.log()“无法读取未定义的值”错误

[英]console.log () "cannot read values of undefined" error

我已将以下代码编写到 console.log 组合页面上的输入值,但它仍然未定义。 虽然请求被发布并且它记录任何字符串语句,如 console.log("posted") 但如果我尝试记录输入的值,它会返回 undefined。 这是我的 app.js 代码

 //jshint esversion:6 const express = require("express"); const bodyParser = require("body-parser"); const ejs = require("ejs"); const homeStartingContent = "Lacus vel facilisis volutpat est velit egestas dui id ornare. Semper auctor neque vitae tempus quam. Sit amet cursus sit amet dictum sit amet justo. Viverra tellus in hac habitasse. Imperdiet proin fermentum leo vel orci porta. Donec ultrices tincidunt arcu non sodales neque sodales ut. Mattis molestie a iaculis at erat pellentesque adipiscing. Magnis dis parturient montes nascetur ridiculus mus mauris vitae ultricies. Adipiscing elit ut aliquam purus sit amet luctus venenatis lectus. Ultrices vitae auctor eu augue ut lectus arcu bibendum at. Odio euismod lacinia at quis risus sed vulputate odio ut. Cursus mattis molestie a iaculis at erat pellentesque adipiscing."; const aboutContent = "Hac habitasse platea dictumst vestibulum rhoncus est pellentesque. Dictumst vestibulum rhoncus est pellentesque elit ullamcorper. Non diam phasellus vestibulum lorem sed. Platea dictumst quisque sagittis purus sit. Egestas sed sed risus pretium quam vulputate dignissim suspendisse. Mauris in aliquam sem fringilla. Semper risus in hendrerit gravida rutrum quisque non tellus orci. Amet massa vitae tortor condimentum lacinia quis vel eros. Enim ut tellus elementum sagittis vitae. Mauris ultrices eros in cursus turpis massa tincidunt dui."; const contactContent = "Scelerisque eleifend donec pretium vulputate sapien. Rhoncus urna neque viverra justo nec ultrices. Arcu dui vivamus arcu felis bibendum. Consectetur adipiscing elit duis tristique. Risus viverra adipiscing at in tellus integer feugiat. Sapien nec sagittis aliquam malesuada bibendum arcu vitae. Consequat interdum varius sit amet mattis. Iaculis nunc sed augue lacus. Interdum posuere lorem ipsum dolor sit amet consectetur adipiscing elit. Pulvinar elementum integer enim neque. Ultrices gravida dictum fusce ut placerat orci nulla. Mauris in aliquam sem fringilla ut morbi tincidunt. Tortor posuere ac ut consequat semper viverra nam libero."; const app = express(); var arr=[]; app.set('view engine', 'ejs'); app.get("/",function(req,res){ res.render("home",{homecontent:homeStartingContent}); }); app.get("/contact",function(req,res){ res.render("contact",{contactContent:contactContent}); }); app.get("/about",function(req,res){ res.render("about",{aboutContent:aboutContent}); }); app.get("/compose",function(req,res){ res.render("compose"); }); // here is the function for post request on compose page giving undefined app.post("/compose",function(req, res){ console.log(req.body.composed); }); app.use(bodyParser.urlencoded({extended: true})); app.use(express.static("public"));
这是我的 compose.ejs 代码

<%-include("partials/header");-%> <h1>Compose</h1> <form class="" action="/compose" method="post"> <input type="text" name="composed" > <button type="submit" name="button">Publish</button> </form> <%-include("partials/footer");-%>

这与console.log无关。 它出错是因为req.body在尝试将该值传递给console.log之前undefined

Express 尝试按照注册的顺序运行中间件和端点。

app.post("/compose",function(req, res){运行并且req.body undefined ,然后请求处理停止。

它永远不会到达app.use(bodyParser.urlencoded({extended: true})); 因为你后来定义了它。

更改代码的顺序,以便首先出现需要执行的内容。

@Quentin 是正确的,我已将您的代码重组如下,您可以创建一个“views”文件夹来将所有 ejs 文件放入其中。

    const express = require("express");
    const bodyParser = require("body-parser");
    const ejs = require("ejs");

    const app = express();
    var arr = [];
    app.set("views", path.join(__dirname, "views"));
    app.set("view engine", "ejs");

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

    const homeStartingContent = "Lacus vel facilisis volutpat est velit egestas dui id ornare. Semper auctor neque vitae tempus quam. Sit amet cursus sit amet dictum sit amet justo. Viverra tellus in hac habitasse. Imperdiet proin fermentum leo vel orci porta. Donec ultrices tincidunt arcu non sodales neque sodales ut. Mattis molestie a iaculis at erat pellentesque adipiscing. Magnis dis parturient montes nascetur ridiculus mus mauris vitae ultricies. Adipiscing elit ut aliquam purus sit amet luctus venenatis lectus. Ultrices vitae auctor eu augue ut lectus arcu bibendum at. Odio euismod lacinia at quis risus sed vulputate odio ut. Cursus mattis molestie a iaculis at erat pellentesque adipiscing.";
    const aboutContent = "Hac habitasse platea dictumst vestibulum rhoncus est pellentesque. Dictumst vestibulum rhoncus est pellentesque elit ullamcorper. Non diam phasellus vestibulum lorem sed. Platea dictumst quisque sagittis purus sit. Egestas sed sed risus pretium quam vulputate dignissim suspendisse. Mauris in aliquam sem fringilla. Semper risus in hendrerit gravida rutrum quisque non tellus orci. Amet massa vitae tortor condimentum lacinia quis vel eros. Enim ut tellus elementum sagittis vitae. Mauris ultrices eros in cursus turpis massa tincidunt dui.";
    const contactContent = "Scelerisque eleifend donec pretium vulputate sapien. Rhoncus urna neque viverra justo nec ultrices. Arcu dui vivamus arcu felis bibendum. Consectetur adipiscing elit duis tristique. Risus viverra adipiscing at in tellus integer feugiat. Sapien nec sagittis aliquam malesuada bibendum arcu vitae. Consequat interdum varius sit amet mattis. Iaculis nunc sed augue lacus. Interdum posuere lorem ipsum dolor sit amet consectetur adipiscing elit. Pulvinar elementum integer enim neque. Ultrices gravida dictum fusce ut placerat orci nulla. Mauris in aliquam sem fringilla ut morbi tincidunt. Tortor posuere ac ut consequat semper viverra nam libero.";

    app.get("/",function(req,res){
    res.render("home",{homecontent:homeStartingContent});
    });

    app.get("/contact",function(req,res){
    res.render("contact",{contactContent:contactContent});
    });

    app.get("/about",function(req,res){
    res.render("about",{aboutContent:aboutContent});
    });

    app.get("/compose", function (req, res) {
      res.render("compose");
    });

    app.post("/compose", function (req, res) {
      console.log(req.body.composed);
      res.redirect("/");
    });

    app.listen(3000);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM