본문 바로가기

JS

TypeError: Path must be a string. Received undefined TypeError: Cannot read property 'file' of undefined

Node js에서 이미지를 업로드 하는데 자주 만나는 에러다.

초반에는 라우터 설정 파일에서 method를 지정해주지 않아서 함수를 인식하지 못하였으므로 당연히 업로드 될 수 있는 파일이 없었다.

form의 method가 get이냐 post냐에 따라 분기하고 post인 경우 각 함수인 경우 파일 업로드 할 수 있게 되어 있다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
if (curItem.type == 'get') {
            router.route(curItem.path).get(curModule[curItem.method]);
        } else if (curItem.type == 'post') {
            console.log('route post');
            if(curItem.method=='images'||curItem.method=='siteinsert'||curItem.method=='siteupdate'){ //이미지 저장하는 함수인 경우
                console.log('route post2');
                router.route(curItem.path).post(upload.array('bookmarkImg',1),curModule[curItem.method]);
                console.log(router.route(curItem.path).post(upload.array('bookmarkImg',1),curModule[curItem.method]));
                console.log('route post3');
            }else{
                router.route(curItem.path).post(curModule[curItem.method]);
            }
        } else {
            router.route(curItem.path).post(curModule[curItem.method]);
        }
cs


방금 만난 에러는 한 파일에 두개의 form이 들어 있어서 생기는 문제였다. Modal에 form을 각각 달아 놨는데 복붙을 한 게 화근이었다. class, id 등이 같으므로 한 곳에서 아무리 파일 업로드를 해도 나머지 한 곳에서는 분명히 비어있으므로 비어있다고 하는 것이다.

req.body를 찍으면 type이 file이 아닌 다른 input의 값들은 잘 나오는데 req.file을 찍으면 [] 이렇게 나왔었다. 귀찮다고 복붙하면 큰일난다...


TypeError: Path must be a string. Received undefined

TypeError: Cannot read property 'file' of undefined