Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/404.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在nodejs中渲染灰尘模板时出现问题_Javascript_Node.js - Fatal编程技术网

Javascript 在nodejs中渲染灰尘模板时出现问题

Javascript 在nodejs中渲染灰尘模板时出现问题,javascript,node.js,Javascript,Node.js,在使用expressjs和dust模板发布表单后,我一直在下面看到这个错误。该表单用于在发布后重定向。 主要错误出现在router.post部分。似乎只有在我尝试使用res.redirect重定向后,问题才会出现 VError: Problem rendering dust template "C:\Users\USER\Desktop\nodejs\Node-Bookstore\public\templates\manage\books\add.dust": The &qu

在使用expressjs和dust模板发布表单后,我一直在下面看到这个错误。该表单用于在发布后重定向。 主要错误出现在router.post部分。似乎只有在我尝试使用res.redirect重定向后,问题才会出现

VError: Problem rendering dust template "C:\Users\USER\Desktop\nodejs\Node-Bookstore\public\templates\manage\books\add.dust": The "path" argument must be of type string. Received an instance of Chunk
    at Stub.callback (C:\Users\USER\Desktop\nodejs\Node-Bookstore\node_modules\adaro\lib\engine.js:167:30)
    at Stub.flush (C:\Users\USER\Desktop\nodejs\Node-Bookstore\node_modules\dustjs-linkedin\lib\dust.js:564:14)
    at Chunk.setError (C:\Users\USER\Desktop\nodejs\Node-Bookstore\node_modules\dustjs-linkedin\lib\dust.js:1051:15)
    at C:\Users\USER\Desktop\nodejs\Node-Bookstore\node_modules\dust-usecontent-helper\index.js:25:27
    at C:\Users\USER\Desktop\nodejs\Node-Bookstore\node_modules\dust-makara-helpers\index.js:50:21
    at C:\Users\USER\Desktop\nodejs\Node-Bookstore\node_modules\iferr\index.js:13:50
    at FSReqCallback.readFileAfterClose [as oncomplete] (internal/fs/read_file_context.js:63:3)
它只在res.redirect()之后发生

我的代码:

'use strict';

var Book = require('../models/bookmodel');
var Category = require('../models/categorymodel');


module.exports = function (router) {
  router.get('/', function (req, res){
    res.render('manage/index');
  });
// Get Books
  router.get('/books', function (req, res){
    Book.find({},{}, function (err, books){
      if (err){
        console.log(err);
      }

      var model = {
        books: books
      }
      res.render('manage/books/index', model);
    });
  });
// Get add book
  router.get('/books/add', function (req, res){
    Category.find({},{}, function (err, categories){
      if (err){
        console.log(err);
      }
      var model = {
        categories: categories
      }

      console.log("before rendered manage/books/add");
      res.render('manage/books/add', model);

    });
  });

//Post the details from the add books page!
  router.post('/books', function (req, res){
    var title = req.body.title && req.body.title.trim();
    var category = req.body.category && req.body.category.trim();
    var author = req.body.author && req.body.author.trim();
    var publisher = req.body.publisher && req.body.publisher.trim();
    var price = req.body.price && req.body.price.trim();
    var description = req.body.description && req.body.description.trim();
    var cover = req.body.cover && req.body.cover.trim();

    if (title == '' || price == "") {
      req.flash('error', 'Please input the price and title');
      res.location('/manage/books/add');
      res.redirect('/manage/books/add');
      console.log("Empty title or price");
    }

    else if (isNaN(price)) {
      req.flash('error', 'Price must be a number!');
      res.location('/manage/books/add');
      res.redirect('/manage/books/add');
      console.log("price is NaN");

    }else {
      var newBook = new Book({
        title: title,
        category: category,
        description: description,
        author: author,
        publisher: publisher,
        cover: cover,
        price: price,
      });

      newBook.save(function(err){
        if (err){
          console.log('save failed: ', err);
        }

        req.flash('success', 'New Book Added!');
        res.location('/manage/books');
        res.redirect('/manage/books');
        console.log("was able to redirect");

      });
    }


  });

  router.get('/categories', function (req, res){
    res.render('manage/categories/index');
  });
};
注意:add.dust文件没有任何错误,因为这里的问题是req.flash()。显然,我不能使用《带灰尘的翡翠》中使用的相同语法

这将添加到根文件夹中的主index.js文件中,您在其中初始化了用于connect flash的middel ware

app.use(flash());
app.use(function (req, res, next) {
    var messages = require('express-messages')(req, res);
    res.locals.messages = function (chunk, context, bodies, params) {
        return chunk.write(messages());
    };
    next();
});
注意,messages函数要求(chunk、context、body、params)参数并返回
return chunk.write(messages())

下一步: 在dust模板中用
{#messages/}
表示消息函数