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
被定义为一个返回字符串的函数。