Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么不能修改CommonJS模块中对象的值?_Javascript_Node.js_Commonjs_Es6 Modules_Template Literals - Fatal编程技术网

Javascript 为什么不能修改CommonJS模块中对象的值?

Javascript 为什么不能修改CommonJS模块中对象的值?,javascript,node.js,commonjs,es6-modules,template-literals,Javascript,Node.js,Commonjs,Es6 Modules,Template Literals,我有一个基本的koav2应用程序,我试图在其中实现模板文本作为查看引擎。在/views/index.js中,如何从app.js填充state的值 我的问题是,我想将对象值从ctx.body=index.render({})一直推到.views/partials/mainTop.js文件,在那里我想在标记之间包含title对象值。有没有一种方法可以实现这一点而不需要app.js中的.views/partials/mainTop.js?我想在模板文本中实现类似的功能,如果它是把手或Nunjuck模板

我有一个基本的
koav2
应用程序,我试图在其中实现模板文本作为查看引擎。在
/views/index.js
中,如何从
app.js
填充
state
的值

我的问题是,我想将对象值从
ctx.body=index.render({})
一直推到
.views/partials/mainTop.js
文件,在那里我想在
标记之间包含
title
对象值。有没有一种方法可以实现这一点而不需要
app.js
中的
.views/partials/mainTop.js
?我想在模板文本中实现类似的功能,如果它是把手或Nunjuck模板的话

/app.js

const index=require('./视图/索引');
const-app=新Koa();
应用程序使用(ctx=>{
index.state={
福:“酒吧”,
};
ctx.body=index.render({
标题:“模板文字”,
description:'香草JS渲染',
});
});
app.listen(3000);
/views/index.js

const main=require('./layouts/main');
让state={};
module.exports.state=状态;
console.log(状态);//返回一个{}空对象,应=>{foo:“bar”}
module.exports.render=(obj)=>{
返回main.render(`
你好,世界!这是HTML5样板

${JSON.stringify(obj,null,4)} ${obj.title} `); };
/views/layouts/main.js

const mainTop=require('../partials/mainTop');
const mainBottom=require('../partials/mainBottom');
module.exports.render=(内容)=>{
返回`
${mainTop.render}
${content}
${mainBottom()}
`;
}
/views/partials/mainTop.js

const render=`
...
`;
module.exports.render=渲染;
/views/partials/mainBottom.js

module.exports=()=>{
返回`
...
`;
}
console.log(状态)
//返回一个
{}
空对象,预期=>
{foo:“bar”}

当然,您得到的是刚刚创建的空对象:

  • 它是app.js中分配给的
    module.exports.state
    属性。您的本地
    状态
    变量不会被覆盖,它引用的对象也不会发生变化。为此,您需要执行
    index.state.foo=“bar”
  • 对象/变量在创建为空对象后立即被记录。index.js中的赋值在
    应用程序中异步进行。请使用
    回调。如果在赋值后调用的render方法中执行了
    console.log
    ,则会得到预期的值。但是,在这种情况下,您可能应该将其作为参数传递

不清楚。您可以定义一个可在任何地方访问的方法来返回值,或者最后使用全局方法。我想知道为什么
mainTop
被定义为一个具有字符串属性的对象,而
maintown
被定义为一个返回字符串的函数。