nodejs 에서 즉시 실행 함수로 초기화 하려고 하는데 자꾸 

 

TypeError: {(intermediate value)} is not a function 가 뜬다.

에러 라인도 자꾸 선언한 함수의 라인을 표시하니 내가 뭘 잘 못했지 계속 찾고있는데..

 

해당 함수를 선언 한 윗 코드에 세미콜론을 안붙여서 뜨는 에러였다.

 

let appData = {
    lastUpdatedTime: undefined
} // <------ 여기!

(function async(){
})();

 

 저곳에 세미콜론을 붙여주면 정상작동한다.

 

그런데 왜 이런일이 벌어지는걸까?

 

let appData = {
    lastUpdatedTime: undefined
}(function async(){
})();

이렇게 인식을 하기때문.. 이렇게 생각하니 이해가 가더라.

삽질 끝

 

참조 : stackoverflow.com/questions/42036349/uncaught-typeerror-intermediate-value-is-not-a-function

회사 메신저로 Mattermost(매터모스트)를 사용 중이다.

얼마 전 사원들 생일파티(...) 담당을 맡게되었는데 메신저에 생일파티 알람을 주면 어떨까 싶어서 찾아봤다.

 

github.com/jonathanwiesel/node-mattermost

 

jonathanwiesel/node-mattermost

a nodejs module for sending and receiving messages from Mattermost - jonathanwiesel/node-mattermost

github.com

위의 프로젝트를 이용했다.

일단 테스트를 위해 채널을 하나 새로 만들었다.

 

1. Hook URL 구하기

 

test channel 생성

 

Menu -> intergrations

작성 후 제일 아래에 Save 를 눌러준다.

3번째의 Channel 은 메세지 수신을 위해 사용하는 듯 한데.. 나중에 더 자세히 찾아봐야겠다.

 

 

해당 URL 이 hook url 이다. 다시 들어와서 보는것도 가능하니 막 어디 적어둘 필요는 없을 듯 하다.

 

 

2. NodeJS js 파일 작성하기

일단 npm 으로 상단의 git 프로젝트를 인스톨하자

npm install node-mattermost

 

//app.js
const Mattermost = require('node-mattermost');
const hookurl = json.hookurl; // 상단에서 구한 hook url
const mattermost = new Mattermost(hookurl);

// 프사 설정을 위해
function base64_encode(file) {
    var bitmap = fs.readFileSync(file);
    return bitmap.toString('base64');
}

mattermost.send({
  text: "생일 축하합니다",

  // 채널명을 입력해준다. 채널명이 한글이면 좀 다른데 아래에서 설명..
  channel: '#test',
  username: '생일축하 봇',
  // 프로필 사진을 지정해준다. 나는 같은 폴더에 있는 케이크 사진을 base64 형태로 추가했다 
  icon_url: 'data:image/png;base64,' + base64_encode('./public/img/cake.png'),

})

 

실행해보자

node app.js

테스트

 

 

3. 채널명이 한글일 때

 

{
    // ...
    channel : 'testz'
    // ...
}

 

펑소에 html 코딩을 할 때 button 등에 데이터를 저장하기 위해

<button id="data1"> 버튼 1 </button>
<button id="data2"> 버튼 2 </button>
<button id="data3"> 버튼 3 </button>
<button id="data4"> 버튼 4 </button>

이렇게 야매로 많이 했었다. 근데 관리해야할 데이터가 좀 많아져서 찾아보니 다른 방법이 있더라.

 

<button id="btn1" data-test="value"> 버튼 </button>

<script type="text/javascript">
	document.getElementById("btn1").addEventListener("click", function(){
        console.log(this.dataset.test);
    })
</script>

<!-- console
value
-->

 

data- 뒤에 원하는 변수명을 입력하고 값을 지정해준다.

그리고 DOM을 얻어와 dataset.변수명으로 구해올 수 있다.

 

<button id="btn1" data-test="value" data-test2="value2"> 버튼 </button>

<script type="text/javascript">
	document.getElementById("btn1").addEventListener("click", function(){
        console.log(this.dataset);
    })
</script>

<!-- console
 { test : "value" , test2 : "value2" }
-->

console

데이터를 여러개 넣어서 구해오고 싶으면 더 추가하면 된다.

'Frontend > HTML' 카테고리의 다른 글

[HTML] Element 클릭 무시하기  (34) 2020.05.12

input 태그에서 엔터 입력시 input의 값을 얻어오는 방법이다.

 

<input id="input">

<script type="text/javascript">

	// id 로 input 객체를 가져온다.
	var input = document.getElementById("input");
    
	// 가져온 객체에 EventListener 를 추가한다. keypress = 키입력 감지
	input.addEventListener('keypress', function(key){

	// key.key 의 값이 Enter 일 경우 코드 실행
        // key.keyCode == 13 도 동일한 기능을 한다.
        if(key.key == 'Enter'){
			var inputValue = input.value;
            console.log(inputValue);
            }
        })
        
</script>	

 

+ Recent posts