Секвенирование простого объекта возвращает неправильное поведение пустых фигурных скобок

#node.js #sequelize.js

Вопрос:

Сценарий: Когда я пытался получить простой объект из запроса sequelize, я получил набор из 3 пустых объектов.

Решение: После нескольких часов попыток разобраться в этом я заметил, что, когда я окружил метод message.get фигурными скобками, он перестает нормально работать.

Может кто-нибудь, пожалуйста, объяснить, почему это происходит? Окружая метод message.get({обычный:true}) фигурными скобками, он дает набор пустых объектов (в данном конкретном случае 3 пустых объекта).

Исходный код:

 const router = require('express').Router();
const {Message} = require('../models/');


router.get('/', async (req, res) => {
    try {

        const dbMessagesData = await Message.findAll();

        // HERE *****************************************
        const messages = dbMessagesData.map(message => {
                message.get({plain: true});
            }
        );


        // MESSAGES CONTENT
        messages.forEach(( element , index, array)=>{
             console.log("---> element :"   JSON.stringify (element) );
        });

        res.render('homepage', {messages});
    } catch
        (e) {
        res.status(400).send(e.message);
    }
});

module.exports = router;
 

Терминал:

 "C:Program Filesnodejsnode.exe" C:UsersgiannDropboxIdeaProjectsHomework14-Tech-Blogserver.js
(node:97384) [SEQUELIZE0002] DeprecationWarning: The logging-option should be either a function or false. Default: console.log
(Use `node --trace-deprecation ...` to show where the warning was created)
Server listening on port 3000
Executing (default): SELECT `id`, `title`, `content`, `created_at` AS `createdAt`, `updated_at` AS `updatedAt`, `user_id`, `user_id` AS `UserId` FROM `Message` AS `Message`;
---> element :undefined
---> element :undefined
---> element :undefined

 

Теперь я убрал блок фигурных скобок:

 const router = require('express').Router();
const {Message} = require('../models/');


router.get('/', async (req, res) => {
    try {

        const dbMessagesData = await Message.findAll();

        //HERE - curly braces removed ****************
        const messages = dbMessagesData.map(message => 
                message.get({plain: true})
            
        );


        // MESSAGES CONTENT
        messages.forEach(( element , index, array)=>{
             console.log("---> element :"   JSON.stringify (element) );
        });

        res.render('homepage', {messages});
    } catch
        (e) {
        res.status(400).send(e.message);
    }
});

module.exports = router;
 

Терминал:

 "C:Program Filesnodejsnode.exe" C:UsersgiannDropboxIdeaProjectsHomework14-Tech-Blogserver.js
(node:188548) [SEQUELIZE0002] DeprecationWarning: The logging-option should be either a function or false. Default: console.log
(Use `node --trace-deprecation ...` to show where the warning was created)
Server listening on port 3000
Executing (default): SELECT `id`, `title`, `content`, `created_at` AS `createdAt`, `updated_at` AS `updatedAt`, `user_id`, `user_id` AS `UserId` FROM `Message` AS `Message`;
---> element :{"id":1,"title":"Title 1","content":"Hey, this is the first message","createdAt":"2021-08-23T17:29:56.000Z","updatedAt":"2021-08-23T17:29:56.000Z","user_id":1,"UserId":1}
---> element :{"id":2,"title":"Title 2","content":"Hey, this is the second message","createdAt":"2021-08-23T17:29:56.000Z","updatedAt":"2021-08-23T17:29:56.000Z","user_id":2,"UserId":2}
---> element :{"id":3,"title":"Title 3","content":"Hey, this is the third message","createdAt":"2021-08-23T17:29:56.000Z","updatedAt":"2021-08-23T17:29:56.000Z","user_id":3,"UserId":3}
``````

What am I missing here?? 
 

Ответ №1:

это просто синтаксис (выучите его наизусть).

 (x) => x
 

эквивалентно

 (x) => {
 return x;
}
 

если вы не укажете вернуть его в этой второй форме, у вас не будет возврата, что означает
, что он вернется неопределенным. отсюда и то, что вы видите.

в вашем примере это должно сработать

 const messages = dbMessagesData.map(message => {
                return message.get({plain: true});
            }
        );
 

Комментарии:

1. БОЖЕ МОЙ! Я рад, что чья-то жизнь не зависит от моего кода! Спасибо тебе, Рафаэль.