如何使用JavaScript将值插入到select语句中,特别是在使用express和postgres时? [英] How do I insert a value into a select statement using JavaScript, specifically when using express and postgres?

查看:89
本文介绍了如何使用JavaScript将值插入到select语句中,特别是在使用express和postgres时?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如何使用JavaScript将值插入到select语句中,特别是在使用express和postgres时?

How do I insert a value into a select statement using JavaScript, specifically when using express and postgres?

createUser和listAllUsers正常工作(以下内容包括在参考)。 try / catch可以正常工作,并且可以满足请求,也可以针对这两个对象抛出错误。

The createUser, and listAllUsers, is working (included below for reference). The try/catch is working and satisfying the request or throwing the error for those two as well.

任何帮助将不胜感激!

使用Postman时,发送get(localhost:4000 / user / id,带有x-www-formurlencoded键值user_id = 3)时收到的输出是…

When using Postman, the output that I receive when I send the get (localhost:4000/user/id with a x-www-formurlencoded key value user_id = 3) is…

{
    "name": "error",
    "length": 90,
    "severity": "ERROR",
    "code": "42601",
    "position": "37",
    "file": "scan.l",
    "line": "1134",
    "routine": "scanner_yyerror"
}

在终端上,它显示以下内容(从我的console.log中捕获)。

And in the terminal, it shows the following (trapped from my console.log).

3
QUERY:  SELECT * FROM users WHERE user_id = ${user_id}

当我卷曲用户时,它在终端上说的也一样。这是curl命令和putput…

When I user curl it says the same in the terminal. Here is the curl command and putput…

curl -X GET localhost:4000/user/3

{名称:错误,长度:90,严重性:错误,代码: 42601, position: 37, file: scan.l, line: 1134, routine: scanner_yyerror} ww10sc2353621:〜james.mcgreggor $ curl -X GET localhost: 4000 / user / 3

{"name":"error","length":90,"severity":"ERROR","code":"42601","position":"37","file":"scan.l","line":"1134","routine":"scanner_yyerror"}ww10sc2353621:~ james.mcgreggor$ curl -X GET localhost:4000/user/3

最终我要传递的3是因为select语句中没有替代user_id。那是我的问题。我不知道如何正确执行此操作。我应该采用这种方法还是尝试将其作为参数传递给URL?

Ultimately the 3 that I am passing as the user_id is not being substituted in the select statement. That is my problem. I cannot figure out how to correctly do this. Should I even be taking this approach, or should I try passing it as a parameter in the URL?

const db = require('../connectors/db.js');
class User {

  constructor(id, user_id, first_name, middle_initial, last_name, email, type) {
    this.id = id;
    this.first_name = first_name;
    this.middle_initial = middle_initial;
    this.last_name = last_name;
    this.email = email;
    this.type = type;
    this.user_id = user_id;
  }

  static newUser(user_id, first_name, middle_initial, last_name, email, type) {
     return db.one(`
      INSERT INTO users ("user_id", "first_name", "middle_initial", "last_name", "email", "type")
      VALUES ('${user_id}', '${first_name}', '${middle_initial}', '${last_name}', '${email}', '${type}')
  returning id
      `)
  }

  static async allUsers() {
    const findAllQuery = 'SELECT * FROM users;';
    return db.query(findAllQuery)
  }

  static async selectUser(user_id) {
    console.log(user_id);
    const findOneQuery = 'SELECT * FROM users WHERE user_id = ${user_id}';
    return db.query(findOneQuery)
  }
}

module.exports = User;



这是从我的Routes文件(Routes.js)



This is from my Routes file (Routes.js)

const express = require('express');
const dataFunctions = require('./catalog.js');

const AppRouter = express.Router();

AppRouter.post('/user', dataFunctions.createUser);
AppRouter.get('/users', dataFunctions.listAllUsers);
AppRouter.get('/user/:id', dataFunctions.listUserByUserID);
AppRouter.delete('/user/:id', dataFunctions.deleteUserByUserID);

module.exports = AppRouter;



这是从我的目录文件(Routes.js)



This is from my Catalog file (Routes.js)

const Users = require('../models/users.js')

// Create

async function createUser(req, res) {
  try {
  console.log(req.body);
  const userId = await Users.newUser(req.body.user_id, req.body.first_name, req.body.middle_initial, req.body.last_name, req.body.email, req.body.type)
 res.status(201).send(`User ID: ${userId.id}`);
  } catch(error) {
    res.status(400).send(error);
  }
}

// List all

async function listAllUsers(req, res) {
  try {
  const userList = await Users.allUsers();
  console.log(userList);
  res.status(200).send(userList);
  } catch(error) {
    res.status(400).send(error);
  }
}

// List by ID

async function listUserByUserID(req, res) {
  try {
  const userList = await Users.selectUser(req.body.user_id);
  console.log(userList);
  res.status(200).send(userList);
  } catch(error) {
    res.status(400).send(error);
  }
}

module.exports = {
  createUser,
  listAllUsers,
  listUserByUserID
}


推荐答案

而不是在静态异步selectUser use的select查询中使用单引号。

Instead of using single quotes in select query in static async selectUser use ``.

这篇关于如何使用JavaScript将值插入到select语句中,特别是在使用express和postgres时?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆