I am getting
this
TypeError
while
posting data to mongodb
using
nodejs and express , I don
'
t understand why I am geeting this error..! please help..!
exports.votes = async (req, res, next) => {
try {
* 1. get the poll from db
* 2. check if the user already exists in any option
* 3. if user has already selected any option do nothing
* 4. if user has selected any other option remove from that option
* 5. if user does not exist in any option, insert his user id to selected option
const { pollId } = req.params;
console.log(pollId);
let { userId, answer } = req.body;
console.log(userId);
console.log(answer);
// get selected poll from db
const poll = await Poll.findById(pollId);
if (answer && poll) {
answer = answer.toLowerCase();
///Finf the Poll
let existingVote = null;
Object.keys(poll.options).forEach((option) => {
// loop on all options, check if the user already exists in any option
if (poll.options[option].includes(userId)) {
existingVote = option;
if (existingVote == null) {
// if there is no existing vote save it to db
try {
const push = {};
push[`options.${answer}`] = userId;
const update = await Poll.findByIdAndUpdate(
pollId,
{ $push: push },
{ upsert: true }
res.status(201).json(update);
} catch (err) {
error.status = 400;
next(error);
} else if (existingVote && existingVote.length > 0) {
// check if answer is same as previous, if yes send not modified
if (existingVote.toLowerCase() === answer.toLowerCase()) {
res.status(304).send("Response already saved");
} else {
// delete the previous response and save it in new
Array.isArray(poll.options[existingVote]) &&
poll.options[existingVote].length > 0
// TODO: filtering this is not returning array but 1
poll.options[existingVote] = poll.options[existingVote].filter(
(vote) => vote != userId
poll.options[answer] = poll.options[answer].push(userId);
const update = await Poll.findByIdAndUpdate(pollId, {
$set: { options: poll.options },
res.status(201).json(update);
} else {
error = {
status: 500,
message: "Something went wrong",
next(error);
} else {
error = {
status: 404,
message: "Poll not found",
next(error);
} catch (error) {
error.status = 400;
next(error);
but whenever I posting data to POSTMAN got no error so why
is
that
https://i.stack.imgur.com/LZLwb.png
[
^
]
Quote:
here is my React code --> please chack- here whenever handalchange work I am getting all the console.log but nodemon crash and get { TypeError: poll.options[option].includes is not a function } so please help..!
import React, { useState, useEffect }
from
"
react"
;
import Poll
from
"
react-polls"
;
import
"
../../styles.css"
;
import { isAutheticated }
from
"
../../auth/helper/index"
;
import { getPolls, postPoll }
from
"
../helper/coreapicalls"
;
import axios
from
"
axios"
;
import { API }
from
"
../../backend"
;
const
MainPoll = () => {
const
userId = isAutheticated() && isAutheticated().user._id;
const
[polls, setPoll] = useState([]);
const
[error, seterror] = useState(
false
);
useEffect(() => {
loadPoll();
}, []);
const
loadPoll = () => {
getPolls().then((data) => {
if
(data.error) {
seterror(data.error);
}
else
{
setPoll(data);
console.log(data);
const
handalchange =
async
(pollId, userId, answer) => {
console.log(pollId);
console.log(userId);
console.log(answer);
await
axios.post(`${API}/vote/${pollId}`, { userId, answer });
return
(
<div className=
"
"
>
<div className=
"
container my-5"
>
<h1 className=
"
blog_heading my-3"
>Poll
'
s of the Day</h1>
<div className="row">
{polls.reverse().map((poll, index) => (
<div className="col-lg-4 col-12 poll_border" key={index}>
noStorage
question={poll.question}
answers={Object.keys(poll.options).map((key) => {
return {
option: key,
votes: poll.options[key].length,
onVote={
(answer) =>
handalchange(poll._id, userId, answer, console.log(answer)) // getting vote
className="mb-2"
export default MainPoll;
What I have tried:
I don't understand what goes worng reactjs code or nodejs code..!
Array.prototype.includes
requires
Node 6
.
Node.js: "Array.includes is not a function" error : learnjavascript
[
^
]
Below thread has solution for lower versions
javascript - Array.prototype.includes on Node js versions <= 4 - Stack Overflow
[
^
]
Read the question carefully.
Understand that English isn't everyone's first language so be lenient of bad
spelling and grammar.
If a question is poorly phrased then either ask for clarification, ignore it, or
edit the question
and fix the problem. Insults are not welcome.
Don't tell someone to read the manual. Chances are they have and don't get it.
Provide an answer or move on to the next question.
Let's work to help developers, not make them feel stupid.
If your nodejs version is less than 6, your current code won't work.
2nd link says polyfill & indexOf is alternative for includes so try if (poll.options[option].indexOf(userId) !== -1)
Check the link for polyfill sample.
Frankly, you won't get instant code from Internet. You may need modify little bit most of time. So use search engines & programming forums to find more answers.