【问题标题】:how to create function like in php in node js如何在节点 js 中创建类似 php 的函数
【发布时间】:2019-01-19 19:56:12
【问题描述】:

其实我用过的功能如下

function selectBloodGroupNames()
{
    return array("A+", "O+", "B+", "AB+", "A-", "O-", "B-", "AB-", "A1+Ve", 
    "Unknown");
}

上述函数返回血型列表,可以根据我们的想法进行格式化,例如显示在下拉列表中或表格中!!!

我已将该函数保存在名为 functions.php 的单独文件中

如何在 express 模块和 ejs 或基本 html 模板引擎中使用与 node.js 中相同的内容。

【问题讨论】:

  • 您是在问如何在 JavaScript 中创建和填充数组吗?即return ['A+', 'O+', 'B+', 'AB+', ...]
  • 不完全一样,实际上我正计划创建一个必须在节点 js 中项目的每个页面中全局调用的函数
  • 所以你想要一个 .js 文件,你可以将它包含在你的每个其他 js 文件中,就像 PHP 的 include() 一样?
  • 是的,@Zim84 不仅在 js 中,我还在我的项目中使用 node js 中的 ejs 模板引擎,所以我也需要在 ejs 模板引擎上完成这个想法。

标签: php html node.js ejs


【解决方案1】:

ejs 文件中带有访问数组的完整示例

data.js

 const sampleArray = {
     function1(){
     return ["A+", "O+", "B+", "AB+", "A-", "O-", "B-", "AB-", "A1+Ve", 
        "Unknown"];
      },
   function2() {
     return ["A+", "O+", "B+", "AB+", "A-", "O-", "B-", "AB-", "A1+Ve", 
        "Unknown"];
     }
    }
module.exports = sampleArray;

ma​​in.js //渲染ejs文件。

const  sampleArray = require('./data');
app.get('/renderEjs', function(req, res) {
  res.set('Content-Type', 'application/javascript');
  res.render('ejsHtmlFileName', { myArray :sampleArray.function1(),myArrayTwo:sampleArray.function2()});
});

ejsFile

<div><p><%= myArray %><%= myArrayTwo %></p></div>

ejs 文件中渲染数据的参考链接 - LINK

【讨论】:

  • 你的回答完全符合我的观点!但是我在 data.js 中使用了多个函数,并且我将在 viewes.ejs 文件中使用这些函数 n 个函数,因此我无法定义每个函数在 main.js 文件中渲染期间!
  • 我已经更新了我的答案,请检查..你需要这样吗?
  • 答案很好!您已经回答了我的预期,但是如果在 view.ejs 文件中必须添加 10 到 15 个函数,就好像硬编码不会自动化!我需要在渲染期间在 main.js 文件中定义 15 函数,而且我必须在渲染期间为许多页面执行此操作,这将增加代码行数!在 main.js 文件中!
  • 现在我第二次更新我的答案请检查
  • 你没有明白我的意思@IftekharDani。您正在为每个功能定义! { myArray :sampleArray.function1(),myArrayTwo:sampleArray.function2()} 我要问的是如果有 20 到 25 个函数,我们如何定义它!这就是我的阙?如果我们定义 25 次意味着单页!想想其他页面!如果有 50 页,我需要为 50 页中的每一个分别传递 25 个函数!所以像 php 这样的简单代码调用像 '' 和 functions.php 为每 50 个页面返回这 25 个函数!
【解决方案2】:

为了在 node.js 中使用,你可以创建一个单独的文件 common.js

 module.exports=function selectBloodGroupNames()
 {
    return ["A+", "O+", "B+", "AB+", "A-", "O-", "B-", "AB-", "A1+Ve", 
    "Unknown"];
 }

然后在你想使用它的文件中,你可以包含它并像下面这样使用它:-

   const Common=require('pathto/common.js');
   let bloodGroupList= Common.selectBloodGroupNames();
   //now you can use it where ever you want 
   console.log(bloodGroupList);  

【讨论】:

  • 如果我有如下功能怎么办? function successMessage($message) { echo ' &lt;div class="alert pastel alert-success" align="center"&gt; &lt;p&gt;'.$message.'&lt;/p&gt; &lt;/div&gt; '; }
【解决方案3】:

你应该安装 babel 才能使用 ES6 for javascript

npm install --save-dev babel-core 然后创建单独的文件 config.js。在 config.js 中:

export default Config {
  selectBloodGroupNames() {
     return ["A+", "O+", "B+", "AB+", "A-", "O-", "B-", "AB-", "A1+Ve", 
    "Unknown"];
  }
}

然后在文件中你要使用的功能

import Config from ./pathto/config.js;

function functionName () {
  var arr = Config.selectBloodGroupNames();
}

【讨论】:

    【解决方案4】:

    最后我自己找到了一个解决方案,答案来自 @IftekharDani 并自己做了一些更改

    functions.js 包含多个函数的文件!!!

    module.exports = {
        menuTop: function(){
            var data = '<li>'+
            '<a href="/login">Log in</a>'+
            '</li>'+
            '<li>'+
            '<a href="/register">Register</a>'+
            '</li>';
            return data;
        },
    
        workCheck: function(user){
            if(user === "OLD")
            {
                var data1 = '<h1>OLD user</h1>';
            }
            else
            {
                var data1 = '<h1>Unknown or new user</h1>';
            }
            return data1;
        }
    };
    

    app.js 主渲染文件,我将带有变量的整个文件传递给 ejs 文件

    var func = require('./functions');
    
    app.get('/', function (req, res) {
        res.render('home', { funs : func});
    });
    

    home.ejs 文件,其中包含函数的内容。

    功能1

    <ul class="nav navbar-nav navbar-right">
        <%- funs.menuTop(); %>
    </ul>
    

    功能2

    <div class="row">
        <%- funs.workCheck("NEW"); %> 
        /* Here i pass parameter to the function that i call from the external file to which make more dynamic. */
    </div>
    

    最后我得到了预期的结果!我会给 @IftekharDani 50% 的积分,因为他们给了我一个想法。谢谢!

    【讨论】:

      猜你喜欢
      • 2019-12-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-25
      • 2021-04-05
      • 2011-04-26
      • 1970-01-01
      • 2017-01-09
      相关资源
      最近更新 更多