programing

[Object: null prototype] 수정 방법 { title: 'product' }

telebox 2023. 10. 19. 22:15
반응형

[Object: null prototype] 수정 방법 { title: 'product' }

저는 배우기 시작했습니다.node.js와 함께expressframework, 다음과 같은 양식을 게시할 때:

router.get('/add-product',(req,res,next)=>{
    res.send('<form action="/product" method="POST" ><input type="text" name="title" /><button type="submit">Submit</button></form>');
});
     
router.post('/product',(req,res,next)=>{
    console.log(req.body);
    res.redirect('/');
});

내가 할때는console.log(req.body)다음을 표시됩니다.

[Object: null prototype] { title: 'product' }

만이 아니라{ title: 'product' }

이것이 실제로 express에 대한 오류인지 아니면 단지 최근 express에 추가된 속성인지 궁금합니다. 왜냐하면 작년에 만든 다른 프로젝트를 다운로드했는데 동일한 접근 방식을 사용했기 때문입니다.console.log(req.body), 같은 출력을 나타냈습니다.

정말 좋은 디자인이네요.개체는 기본적으로 다음을 상속합니다.Object.prototype일부 도우미 기능이 포함되어 있습니다(.toString(),.valueOf()를 사용하는 경우req.bodyHTTP 요청에 매개 변수를 전달하지 않으면req.body텅 비다만약 그것이 단지 "일반적인 물체"였다면, 그것은 완전히 비어있지는 않았을 것입니다.

console.info(({ "toString": 5 })['toString']);   // 5
console.info(({})['toString']);                  // [Function: toString]

속성/프로토타입이 없는 객체를 의미하는 "빈 객체"를 생성하는 방법이 있는데, 그것은 다음과 같습니다.Object.create(null). 콘솔에서 해당 개체 중 하나가 표시됩니다.

아니요, 이것은 고쳐야 할 버그가 아니라 JS의 기능을 잘 활용한 것입니다.

이거 먹어봐요.

const obj = JSON.parse(JSON.stringify(req.body)); // req.body = [Object: null prototype] { title: 'product' }

console.log(obj); // { title: 'product' }

해피코딩..!

문제가 생겨서 단말기에 아래 설명이 표시되었습니다.

body-parser deprecated undefined extended: provide extended option at express

그리고 이것을 사용했습니다.app.use(bodyParser.urlencoded({extended: false}))

아니면

Express 4.16+ 버전을 실행하고 있는 다음 그냥 입력합니다.

app.use(express.urlencoded({extended: true}))

당신에게 도움이 되는 것 같아요.

확장 옵션에 대한 자세한 내용은 문서를 읽어보거나 여기에 있는 누군가가 잘 답변해 주었거나 express 4.0에서 '확장'이 의미하는 바는 무엇입니까?

사용가능Object.assign다음과 같은 방법으로 문제를 해결합니다.

const obj = Object.assign({},req.body)

console.log(obj)

다음과 같이 새 개체를 초기화합니다.Object.prototype의 모든 속성을 할당합니다.req.body하게.

개체가 Null 개체를 기반으로 하기 때문입니다.테스트에 정확한 일치가 필요한 경우 다음을 사용하는 것이 가장 좋은 방법입니다.

const groups = {...match.groups} // remove null object for test comparison

아래 코드가 저에게 효과가 있었습니다.

app.use(express.urlencoded({ extended : true }));
app.use(express.json());

저스트 체인지{extended: false}로.{extended: true}새로운 버전의 바디파서에도 효과가 있습니다.^1.19.0 버전에서 작동합니다.

또 다른 옵션은 사전/객체의 키 값 쌍을 간단히 반복하는 것입니다.

for (let parameter in req) {
    console.log(parameter, '->', query[parameter]);
}

그게 내게 무슨 수작을 부린 거지

JSON.parse 기능을 다음과 같이 사용하는 것을 권장합니다.

const form = JSON.parse(JSON.stringify(req.body)) console.log(form.title)

다음을 시도해 볼 수 있습니다.

app.use(express.urlencoded({ extended: false }));

저도 같은 문제가 있었습니다.문제가 제 ejs 파일에 있다는 것을 알게 되었습니다.이것을 사용했습니다.

<form method="POST">

하지만 아약스를 사용하여 게시할 방법을 설정하여 양식을 제출할 때 어떻게든 빈 개체와 내가 제공한 값을 보냈습니다.ejs에서 메소드를 삭제했을 때 문제가 해결되었습니다.

도움이 되었으면 좋겠습니다.

언급URL : https://stackoverflow.com/questions/56298481/how-to-fix-object-null-prototype-title-product

반응형