簡體   English   中英

req.body.variable名稱在節點js中顯示未定義的值

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

我是Node js的新手,正在嘗試創建博客系統。 當我嘗試管理category.js文件中的發布值時,我將值獲取為“未定義”。 我正在使用post.js添加新帖子,並使用category.js添加新類別。

這是我的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;

這是我的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;

這是我的類別文件。

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;

這是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')

這是玉器檔案。

擴展布局

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');

我在post.js中獲得req.body值。 但是,當我嘗試在category.js中獲得相同的值時,我得到的值是未定義的。 我需要在類別文件中獲取title的值,在帖子文件中應使用相同的標題。

你們能找到我同樣的解決方案嗎? 我從頭開始嘗試,但是沒有找到合適的解決方案。

路由是指確定應用程序如何響應特定端點的客戶端請求。 您為同一端點創建了2個路由器。

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

請求數據后,數據將到達指定的地址,路由器將接收並處理該數據。 因此,您將收到對post.js的請求,express處理該請求,然后對其進行響應。 這樣該請求將被終止。

但在category.js中,您正在等待已經消失的相同請求。 如果您想測試它,請在post.js中注釋掉router.post,然后您會看到express將處理category.js中的請求。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM