如何在节点 js 中创建类似 php 的函数
Posted
技术标签:
【中文标题】如何在节点 js 中创建类似 php 的函数【英文标题】:how to create function like in php in node js 【发布时间】: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 模板引擎上完成这个想法。
【参考方案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;
main.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 ' <div class="alert pastel alert-success" align="center"> <p>'.$message.'</p> </div> ';
【参考方案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% 的积分,因为他们给了我一个想法。谢谢!
【讨论】:
以上是关于如何在节点 js 中创建类似 php 的函数的主要内容,如果未能解决你的问题,请参考以下文章