2015-10-02 6 views
1

Ive попробовал много вещей, чтобы исправить это, но это всегда приводит к одной или другой ошибке.nodejs-cassandra wont insert ints

Ниже приведен мой код, который я использую для выполнения запроса INSERT.

  req.client.execute("INSERT INTO users (id,username,email,password,userFolder) VALUES (now(),'"+newUser.username+"','"+newUser.email+"','"+newUser.password+"',"+newUser.userFolder+");",function(err,result){ 
      if(err){ 
       console.log(err.message) 
      }else{ 
       console.log("New user created") 
      } 
     }); 

newUser.userFolder просто определяется в массиве, как new Date().getTime()

Айв пытался делать parseInt(userFolder: new Date().getTime()); но всегда кажется, что в результате этой ошибки либо

Кроме того, если вы пытаетесь Number(userFolder :new Data().getTime()); также не работа и результаты во второй ошибке ниже;

Еще одна вещь, которую я пробовал, - это просто набрать newUser.userFolder.valueOf(), что также приводит к второй ошибке.

Invalid STRING constant (1443827057269) for "userfolder" of type int 

или

Unable to make int from '1443827264655' 

У меня есть ощущение, потому что "это перед номером является причиной этого. Однако я не уверен, как удалить это.

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

Im в основном перемещается из MySQL в cassandra и имеет крайний срок для этого проекта, поэтому любая помощь будет оценена по достоинству.

Кстати им с помощью datastax драйвера для узла-JS

ответ

2
req.client.execute("INSERT INTO users (id,username,email,password,userFolder) VALUES (now(), :username, :email, :userFolder)", 
        newUser, 
        {prepare: true }, 
        function(err,result) { 
         if(err){ 
          console.log(err.message) 
         }else{ 
          console.log("New user created") 
        } 
    }); 

Теперь немного подробностей:

  1. вместо создания строки CQL путем конкатенации значений, приведенный выше код создает параметризованных запрос
  2. параметры в запросе извлекаются по имени (например, username) из объекта newUser. Имена параметров должны быть точно такими же, как имена свойств объекта.

    Существует возможность использовать ? вместо позиционных параметров, а затем вы можете передать их значение в массиве:

    req.client.execute("INSERT INTO users (id,username,email,password,userFolder) VALUES (now(), ?, ?, ?)", 
          [newUser.username, newUser.password, newUser.userFolder], ... 
    
  3. {prepare: true} говорит клиенту подготовить это заявление так, если он использовал несколько раз он оптимизирован как его выполнение, так и передача параметров

Последнее, но не менее важное: пожалуйста, не храните пароль в ясном состоянии.

Смежные вопросы