简体   繁体   English

req.body.variable名称在节点js中显示未定义的值

[英]req.body.variable name showing undefined value in node js

I am new to Node js and trying to create a blog system. 我是Node js的新手,正在尝试创建博客系统。 When i tried to console the posted value in categories.js file, i am getting value as "undefined". 当我尝试管理category.js文件中的发布值时,我将值获取为“未定义”。 I am using post.js for adding new posts and category.js for adding new categories. 我正在使用post.js添加新帖子,并使用category.js添加新类别。

Here is my app.js file. 这是我的app.js文件。

var createError = require('http-errors');
var express = require('express');
var expressValidator = require('express-validator');
var path = require('path');
var cookieParser = require('cookie-parser');
var session = require('express-session');
var multer = require('multer');
var upload = multer({dest: './public/images/uploads'});
var flash = require('connect-flash');
var logger = require('morgan');
var mongodb = require('mongodb');
var db = require('monk')('localhost/nodeblog');

var indexRouter = require('./routes/index');
var posts = require('./routes/posts');
var categ = require('./routes/categories');

var app = express();

app.locals.moment = require('moment');

// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');

app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));

// Session
app.use(session({
  secret: 'secret',
  resave: true,
  saveUninitialized: true
}));

// Validator
app.use(expressValidator({
  errorFormatter: function(param, msg, value) {
    var namespace = param.split('.')
    , root = namespace.shift()
    , formParam = root;

    while(namespace.length) {
      formParam += '[' + namespace.shift() + ']';
    }

    return {
      param: formParam,
      msg: msg,
      value: value
    };
  }
}));

// Connect Flash
app.use(require('connect-flash')());
app.use(flash());
app.use(function (req, res, next) {
  res.locals.messages = require('express-messages')(req, res);
  next();
});

// Make our db accessible to our router
app.use(function(req, res, next) {
  req.db = db;
  next();
});

app.use('/', indexRouter);
app.use('/posts', posts);
app.use('/categories', categ);

// catch 404 and forward to error handler
app.use(function(req, res, next) {
  next(createError(404));
});

// error handler
app.use(function(err, req, res, next) {
  // set locals, only providing error in development
  res.locals.message = err.message;
  res.locals.error = req.app.get('env') === 'development' ? err : {};

  // render the error page
  res.status(err.status || 500);
  res.render('error');
});

module.exports = app;

Here is my post.js file 这是我的post.js文件

var express = require('express');
var router = express.Router();
var mongodb = require('mongodb');
var multer = require('multer');
var upload = multer({dest: './public/images/uploads'});
var db = require('monk')('localhost/nodeblog');

router.get('/add', function(req, res, next) {
    var categories = db.get('categories');
    categories.find({}, {}, function(err, categories) {
        res.render('addpost', {
            "title" : "Add Post",
            "categories": categories
        });
    });
});

router.post('/add', upload.single('profileimage'), function(req, res, next) {

    // Getting Form Values 

    var title       = req.body.title;
    console.log(title);
    var category    = req.body.category;
    var body        = req.body.body;
    var author      = req.body.author;
    var date        = new Date();

    if(req.file) {
        var profileimage = req.file.filename;
    } else {
        var profileimage = 'noimage.png';
    }

    // Form Validation
    req.checkBody('title', 'Title Field is required').notEmpty();
    req.checkBody('body', 'Body field is required').notEmpty();

    // Check for Errors
    var errors = req.validationErrors();

    if(errors) {

        res.render('addpost', {
            "errors": errors,
            "title": title,
            "body": body
        });
    } else {
        var posts = db.get('posts');

        // Submitting values to DB
        posts.insert({
            "title": title,
            "body": body,
            "category": category,
            "date": date,
            "author": author,
            "profileimage": profileimage
        }, function(err, post) {
            if(err) {
                res.send("There is an issue in submitting the post");
            } else {
                req.flash('success','Post Submitted Successfully');
                res.location('/');
                res.redirect('/');
            }
        });
    }
});



module.exports = router;

Here is my category file. 这是我的类别文件。

var express = require('express');
var router = express.Router();

router.get('/add', function(req, res, next) {
    res.render('addcategory', {
        "title" : "Add Category"
    });
});

router.post('/add', function(req, res, next) {

    // Getting Form Values 
    var title       = req.body.title;
    //console.log(req.body);
    console.log(title);
});



module.exports = router;

Here is the addcategory jade file. 这是addcategory玉文件。

extends layout

block content
    h1=title
    ul.errors
        if errors
            each error, i in errors
                li.alert.alert-danger #{error.msg}
    form(method='post', action='/categories/add', enctype='multipart/form-data')
        .form-group
            label Title:
            input.form-control(name='title',type='text')
        input.btn.btn-default(name='submit',type='submit',value='Save')

Here is post jade file. 这是玉器档案。

extends layout 扩展布局

block content
    h1=title
    ul.errors
        if errors
            each error, i in errors
                li.alert.alert-danger #{error.msg}
    form(method='post', action='/posts/add', enctype='multipart/form-data')
        .form-group
            label Title:
            input.form-control(name='title', type='text')
        .form-group
            label Category
            select.form-control(name='category')
                each category, i in categories
                    option(value= '#{category.title}') #{category.title}
        .form-group
            label Body
            textarea.form-control(name='body', id='body')        
        .form-group
            label Main Image
            input.form-control(name='profileimage', type='file')
        .form-group
            label Author
            select.form-control(name='author')
                option(value='Deepesh') Deepesh
                option(value='Sudha') Sudha
        input.btn.btn-default(name='submit', type='submit', value='Save')
        script(src='/ckeditor/ckeditor.js')
        script
            | CKEDITOR.replace('body');

I am getting req.body value in post.js. 我在post.js中获得req.body值。 But when i tried to get the same in categories.js, i am getting the value as undefined. 但是,当我尝试在category.js中获得相同的值时,我得到的值是未定义的。 I need to get the value of title in categories file, where the same should work in post file. 我需要在类别文件中获取title的值,在帖子文件中应使用相同的标题。

Can you guys find me a solution for the same. 你们能找到我同样的解决方案吗? I tried from my end, but didn't get a proper solution. 我从头开始尝试,但是没有找到合适的解决方案。

Routing refers to determining how an application responds to a client request to a particular endpoint. 路由是指确定应用程序如何响应特定端点的客户端请求。 you created 2 routers for the same endpoint. 您为同一端点创建了2个路由器。

router.post('/add', function(req, res, next) {} //in categories.js and post js

once you requested data, data will go to specified address and router will take it and handle it. 请求数据后,数据将到达指定的地址,路由器将接收并处理该数据。 so you are getting the request to post.js and express handles it and then responds it. 因此,您将收到对post.js的请求,express处理该请求,然后对其进行响应。 so that request will be ended. 这样该请求将被终止。

but in categories.js you are waiting for the same request which is already gone. 但在category.js中,您正在等待已经消失的相同请求。 if you wanna test it, comment out the router.post in the post.js and and you will see that express will handle the request in categories.js. 如果您想测试它,请在post.js中注释掉router.post,然后您会看到express将处理category.js中的请求。

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

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