代码解释nodejs expressjs mongoose

时间:2016-09-25 20:16:00

标签: node.js mongodb express

我觉得有点尴尬,请你解释部分代码吗?

例如,我不知道,这部分是什么?我在哪里可以阅读更多相关信息?

   function parsePostStory(data) {
      return {
        name : data.name
      }
    }

什么是req.body?这是json req的身体吗? 为什么我们声明空数组,为什么要返回它?只是为了清晰起见? Story.create只是一种猫鼬方法吗?

其余代码在这里:

    router.post('/stories', function(req, res) {
      var validation = validatePostStory(req.body);
      if(validation.length > 0) {
        return res.badRequestError(validation);
      }
      var story = parsePostStory(req.body);
      Story.create(story, function(err, story) {
        if(err) {
          console.log(err.message);
          return res.internalServerError();
        } res.send(story);
      });
    });

    function validatePostStory(data) {
      var array = [];
      if (!data.name || typeof data.name !== 'String') {
        return array.push('name');
      }
      return array;
    }

    function parsePostStory(data) {
      return {
        name : data.name
      }
    }

再次对这个问题感到抱歉,并感谢你。

1 个答案:

答案 0 :(得分:2)

我假设你知道请求 - 响应周期如何处理HTTP请求以及客户端 - 服务器与它的交互。如果没有,维基百科请求 - 响应和客户端 - 服务器(两个链接限制,否则我会将它们发布为链接)

请求会向服务器发送大量信息。如果您在NodeJS中对console.log中的请求进行console.log,您将看到它包含的许多信息与您所需的信息并不完全相关。

您使用Express作为您的网络框架。在这种情况下,req.body是您从客户端发送到服务器的信息。使用req.body将确保您不使用从客户端传递到服务器的额外信息。 Req.body是你想要的代码。 (注意:Express v4原生支持Req.body,您必须使用body-parser之类的内容)有关详细信息,请参阅Express docs

现在,让我们分解一下这段代码。你基本上有3个独立的功能。我们来看看validatePostStory。

function validatePostStory(data) {
      var array = [];
      if (!data.name || typeof data.name !== 'String') {
        return array.push('name');
      }
      return array;
 }

此功能是验证功能。它需要一个参数 - 一个对象并返回一个数组。实际上,这样做是检查名称是否为字符串 - 如果不是,则返回长度为1的数组。以下条件检查长度并返回400(如果大于0)

      if(validation.length > 0) {
        return res.badRequestError(validation);
      }

我不完全确定为什么这需要一个单独的功能。看起来你可能只是这样做。

if (!req.body.name || typeof req.body.name !== 'String') {
        return  res.badRequestError(validation);
      }

以下函数函数实质上转换数据,以便mongodb / mongoose可以以正确的格式存储它

function parsePostStory(data) {
      return {
        name : data.name
      }
    }

与说法相同:

  var story = {name: req.body.name}

我认为Story.create是一种自定义的mongoose方法,是的。