req.params呼叫之间的变化

时间:2017-04-26 17:26:05

标签: javascript node.js express

我正在写一个关于glitch.me的小node.js应用程序,我遇到了一个我不太懂的问题。它是一种消息板(freeCodeCamp的一个项目),你可以发布一个线程(指定一个板),然后查看板上的消息列表。线程存储在mongodb集合中。通过req.params.board访问董事会的名称。问题是,req.params.board在两个函数调用之间以某种方式缩短了1个符号。 这是我的路由文件和我的处理程序(在一个单独的模块中),在处理程序中有console.logs,它将显示我的意思。我们假设我们在' newBoard'板:

api.js

    module.exports = function (app) {

  app.route('/api/threads/:board')

  .get(threadHandler.getThreads)
  .post(threadHandler.postThread)
  .delete(threadHandler.deleteThread)
  .put(threadHandler.reportThread)

  app.route('/api/replies/:board')
  .post(threadHandler.postReply)
  .get(threadHandler.getReplies)
  .delete(threadHandler.deleteReply)
  .put(threadHandler.reportReply)

};

处理程序:

  module.exports.postThread = function(req, res){
  console.log(req.params.board); //logs newBoard
  var newThread = new Thread({
    text: req.body.text,
    delete_password: req.body.delete_password,
    created_on: new Date(),
    bumped_on: new Date(),
    reported: false,
    replies: [],
    replycount: 0,
    board: req.params.board
  })
  newThread.save();
  res.redirect('/b/'+req.params.board);  
}

module.exports.getThreads = function(req, res){
//gets 10 last messages on the board
  console.log(req.params.board); //logs newBoar
  Thread.find({}).sort({bumped_on: -1}).limit(10).exec(function (err, docs){
    if (err) return;
    docs.forEach(function(doc)
     {
          if(doc.replies.length > 3) {
          doc.replies = doc.replies.slice(-3);
          }
          })
    res.json(docs);
  })
}
 module.exports.getReplies = function(req, res){
 //gets a separate thread with all the replies
  console.log(req.params.board, 'reply'); //logs newBoard + _id of the  thread, so the url is '/newBoard/5900d2da926ef6277e143564' it will log '/newBoard5900d2da926ef6277e143564', 'eating' the slash between board and id.

  Thread.findById(req.query.thread_id, function(err, foundThread){
    if (err) return;
    if (foundThread){
      res.json(foundThread);
    }
  })
}

我不明白发生了什么,所以如果有人告诉我它为什么会发生以及如何解决它,我真的很感激。我的整个项目都在这里:https://glitch.com/edit/#!/shrouded-consonant

1 个答案:

答案 0 :(得分:3)

您正在重定向到import numpy as np import matplotlib.pyplot as plt bins = 10 data = np.random.randn(1000, 3) colors = ['blue','green', 'red'] plt.hist(data, bins, histtype='bar', color=colors, stacked=True, fill=True) plt.show() ,但your HTML执行此操作:

/b/newBoard

它假定重定向到var currentBoard = window.location.pathname.slice(3,-1); ;使用/b/newBoard/,它正在尝试切割不存在的尾部斜杠。因此-1

最简单的解决方案是修复重定向:

newBoar