从JS函数到NodeJS

时间:2019-07-17 12:39:15

标签: javascript html node.js

我是NodeJS的一个新手,我有一个任务要做:将js函数转移到NodeJS。

这是我的HTML javascript函数

compressGS1DigitalLink(digitalLinkURI,useShortText,uriStem,uncompressedPrimary,useOptimisations,compressOtherKeyValuePairs) {
            // extract query string
            let firstQuestionMark = digitalLinkURI.indexOf("?");
            let queryString="";
            let nonGS1keyvaluePairs={};
            if (firstQuestionMark > -1) {
                    queryString = digitalLinkURI.substr(1+firstQuestionMark);
            }
            if (queryString !== "") {
                    // if semicolon was used as delimiter between key=value pairs, replace with ampersand as delimiter
                    queryString = queryString.replace(new RegExp(";", 'g'),"&");

                    let firstFragment = queryString.indexOf("#");
                    if (firstFragment > -1) {
                            queryString = queryString.substring(0,firstFragment);
                    }

                    let pairs = queryString.split("&");
                    for (let i=0; i<pairs.length; i++) {
                            let p = pairs[i].split("=");
                            // if the key is not numeric AND is not a shortcode such as exp or expdt, then add to the nonGS1keyvalueePairs
                            if ((p[0] !== null) && (p[1] !== null) && (!(this.regexAllNum.test(p[0])) && (!(this.shortCodeToNumeric.hasOwnProperty(p[0]))))) {
                                    nonGS1keyvaluePairs[p[0]]=this.percentDecode(p[1]);
                            }
                    }
            }

            let gs1AIarray=this.extractFromGS1digitalLink(digitalLinkURI).GS1;
            let compressedDL=this.buildCompressedGS1digitalLink(gs1AIarray,useShortText,uriStem,useOptimisations,compressOtherKeyValuePairs,nonGS1keyvaluePairs);
            return compressedDL;
    }

第二个:

    compressedDigitalLinkOutput : function() {
            if (this.elementStringInput !== "") {
                try {
                    this.error1="";
                    return gs1dlt.gs1ElementStringsToCompressedGS1DigitalLink(this.elementStringInput, (this.shortnames =="true"), this.uristem, (this.uncompressedPrimary=="true") , (this.useOptimisations=="true") );
                } catch(err) {
                    this.digitalLinkOutput="";
                    this.error1=err+"\n"+err.stack;
                    return "";
                }
            } else {
            return "";
            }
        },

我需要做的是将它们都从JS中删除,并将它们放入NodeJS中。

这些功能应该压缩输入:

<tr class="digitalLink"><td class="label">Input: Uncompressed GS1 Digital Link URI</td><td>
<form action="/compression" method="get">
<input id="uncompressedDigitalLinkInput" class="digitalLink" type="text" v-model="uncompressedDigitalLinkInput"></td><td class="charCount">{{uncompressedDigitalLinkInput.length}}</td>

这是我尝试做的事情:使用get和post请求传递参数

  app.post('/compression', function(req,res){
  if (this.uncompressedDigitalLinkInput !== "") {
    try {
      this.error3="";
      return gs1dlt.compressGS1DigitalLink(this.uncompressedDigitalLinkInput,(this.shortnames =="true"),this.uristem,(this.uncompressedPrimary=="true"),(this.useOptimisations=="true"),(this.compressOtherKeyValuePairs=="true"));
    } catch(err) {
      this.error3=err+"\n"+err.stack;
      return "";
    }


  } else {
    return "";
  }
  return uncompressedDigitalLinkInput;
})

假定的输出应该是这个 enter image description here

这是我目前得到的: enter image description here 而且我不明白为什么它不起作用,通过NodeJS函数,我传递了参数并返回了适当的变量。 那我该怎么办?

谢谢

1 个答案:

答案 0 :(得分:0)

我假设您使用Express.js。

如果要向客户端发送响应,则应在Response对象上使用 send 方法,而不要返回任何内容。

尝试这样的事情

 app.post('/compression', function(req,res){
  if (this.uncompressedDigitalLinkInput !== "") {
    try {
      this.error3="";
      const response = gs1dlt.compressGS1DigitalLink(this.uncompressedDigitalLinkInput,(this.shortnames =="true"),this.uristem,(this.uncompressedPrimary=="true"),(this.useOptimisations=="true"),(this.compressOtherKeyValuePairs=="true"));
      res.status(200).send(response);
    } catch(err) {
      this.error3=err+"\n"+err.stack;
      res.status(200).send("");
    }


  } else {
    res.status(200).send("");
  }
  res.status(200).send(uncompressedDigitalLinkInput);
})