0

나는이 기본 koa v2을 사용하여 템플릿 리터럴을보기 엔진으로 구현하려고합니다. ./views/index.js에서 state의 값을 app.js에서 어떻게 채울 수 있습니까?CommonJS 모듈에서 객체의 값을 수정할 수없는 이유는 무엇입니까?

내 문제는 내가의 내가 <title></title> 태그 사이 title 개체 값을 포함 할 가정 해 봅시다 .views/partials/mainTop.js 파일로 다운 ctx.body = index.render({})에서 모든 방법을 개체 값을 밀어 할 것입니다. 이를 달성하기위한 방법이 있습니까 .views/partials/mainTop.js 에? 핸들 바나 nunjucks 템플릿이라면 템플릿 리터럴과 비슷한 것을 얻고 싶습니다.

./app.js

const index = require('./views/index'); 
const app = new Koa(); 

app.use(ctx => { 
    index.state = { 
    foo: 'bar', 
    }; 
    ctx.body = index.render({ 
    title: 'Template Literals', 
    description: 'Vanilla JS rendering', 
    }); 
}); 

app.listen(3000); 

./views/index.js

const main = require('./layouts/main'); 

let state = {}; 
module.exports.state = state; 
console.log(state); // returning an {} empty object, expected => { foo: "bar" } 

module.exports.render = (obj) => { 
    return main.render(` 
    <p>Hello world! This is HTML5 Boilerplate.</p> 
    ${JSON.stringify(obj, null, 4)}} 
    ${obj.title} 
    `); 
}; 

./views/layouts/main.js

const mainTop = require('../partials/mainTop'); 
const mainBottom = require('../partials/mainBottom'); 

module.exports.render = (content) => { 
    return ` 
    ${mainTop.render} 

    ${content} 

    ${mainBottom()} 
    `; 
} 

./views/partials/mainTop.js

,210

./views/partials/mainBottom.js

module.exports =() => { 
    return ` 
    ... 
    </body> 
    </html> 
    `; 
} 
+1

불분명 함. 어디에서나 접근 할 수있는 메서드를 정의하여 값을 반환하거나 최후의 수단으로 전역을 사용할 수 있습니다. – dandavis

+0

'mainTop'이 문자열 속성이있는 객체로 정의 된 이유는 무엇입니까? 'mainBottom'은 문자열을 반환하는 함수로 정의되어 있습니다. – Bergi

답변

1

console.log(state);{} 빈 객체를 반환 예상 // =>{ foo: "bar" } 물론

방금 ​​만든 빈 객체가 있어요 :

  • 그것은 module.exports.state pr입니다. app.js에 할당 된 오페라 해당 지역의 state 변수를 덮어 쓰지 않으며 해당 변수가 참조하는 개체도 변경되지 않습니다. 그렇게하려면 index.js에 index.state.foo = "bar";을 입력해야합니다.
  • 개체/변수는 빈 개체로 만든 직후 기록됩니다. index.js의 할당은 app.use 콜백 내에서 비동기 적으로 발생합니다. 렌더링 방법에 console.log (, 할당 후)을 입력하면 예상 한 값을 얻게됩니다. 그러나이 경우 매개 변수로 전달해야합니다.