Sequelize plain object returns empty - 花括号行为不当
Sequelize plain object returns empty - curly braces misbehaving
场景:
当我尝试从 sequelize 查询中获取普通对象时,我得到了一组 3 个空对象。
解决方法:
经过几个小时的尝试,我注意到当我用花括号包围 message.get 方法时,它停止正常工作。
有人可以解释为什么会这样吗?通过用大括号包围 message.get({plain: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 Files\nodejs\node.exe" C:\Users\giann\Dropbox\IdeaProjects\Homework-Tech-Blog\server.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 Files\nodejs\node.exe" C:\Users\giann\Dropbox\IdeaProjects\Homework-Tech-Blog\server.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??
它只是语法(记住它)
(x) => x
等同于
(x) => {
return x;
}
如果你不把 return 放在第二个表格中,你将没有 return,这意味着
它将 return 未定义。因此你看到了什么。
在你的例子中这应该有效
const messages = dbMessagesData.map(message => {
return message.get({plain: true});
}
);
场景: 当我尝试从 sequelize 查询中获取普通对象时,我得到了一组 3 个空对象。
解决方法: 经过几个小时的尝试,我注意到当我用花括号包围 message.get 方法时,它停止正常工作。
有人可以解释为什么会这样吗?通过用大括号包围 message.get({plain: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 Files\nodejs\node.exe" C:\Users\giann\Dropbox\IdeaProjects\Homework-Tech-Blog\server.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 Files\nodejs\node.exe" C:\Users\giann\Dropbox\IdeaProjects\Homework-Tech-Blog\server.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??
它只是语法(记住它)
(x) => x
等同于
(x) => {
return x;
}
如果你不把 return 放在第二个表格中,你将没有 return,这意味着 它将 return 未定义。因此你看到了什么。
在你的例子中这应该有效
const messages = dbMessagesData.map(message => {
return message.get({plain: true});
}
);