当前位置: 首页 > 知识库问答 >
问题:

如何使用knex和Express.js将JSON数据插入到3个表中并通过JSON响应2个表的数据

弓磊
2023-03-14

使用knex和Express.js将JSON数据插入到3个表中,并通过JSON响应2个表的数据

我们希望将数据插入到login、user和profile表中,然后通过JSON响应user和profile表数据。

db.transaction(trx => {
      trx.insert({
          password: password,
          email: user.email,
          username: user.username
        })
        .into('login')
        .returning('username')
        .then(loginusername => {
             return trx('users')
                .returning('*')
                 .insert({
                  email: user.email,
                  username: loginusername,
                  name: user.name,
                  joined: new Date()
                  })
            .returning(user[0])
            .then(user => {
             return trx('profile')
                .returning('*')
                 .insert({
                  name: name,
                  image: image,
                  username: user.username
                  })
            .then(user => {
                 res.json(user[0], profile[0]);
                  })

          })

共有1个答案

濮阳唯
2023-03-14

您的思路是对的,只是我纠正了一些语法问题。为了清楚起见,我还将表记录结构移出了插入处理。

值得注意的是,.returning()不能与SQLite或MySQL一起工作。(请参阅此处的文档)。如果您正在使用这两种方法中的任何一种,那么请保存并返回输入中的数据。

// separated record data for clearer code below
let loginData = { password: password,
                email: user.email,
                username: user.username };
let userData = { email: user.email,
                username: user.username,
                name: user.name,
                joined: new Date() };
let profileData = { name: user.name,
                image: image,
                username: user.username };

let retUserName = null; // need to track the .returning() data after the .then is complete
let retUserData = null;
let retProfileData = null;

db.transaction(trx => {
    return trx.insert(loginData).into('login').returning('username')
        .then(retData => {
            retUserName = retData[0];  // save the data outside of .then
            return trx.insert(userData).into('users').returning('*')
        })
        .then(retData => {
            retUserData = retData[0];          // save the data outside of .then
            return trx.insert(profileData).into('profile').returning('*')
        })
        .then(retData => {
            retProfileData = retData[0];
            console.log({ 'userData': retUserData, 'profileData': retProfileData });
            // console.log to be replaced by your response:
            // res.json({ 'userData': retUserData, 'profileData': retProfileData });
        })
});
 类似资料:
  • 问题内容: 有人可以告诉我,以下JDBC代码中的第一个条件是否是针对两个不同的表执行两个不同的SQL查询? 问题答案: 在我的书中,我总是建议关闭已经打开的资源,以避免可能的泄漏。 一种更现代的方法是使用try-with- resources :

  • 我有一个登记表,并将插入数据输入到两个不同的表使用注册功能。这是表结构: 使用者 用户id(int) 用户电子邮件(varchar(64)) 用户名(varchar(64)) 用户通行证(varchar(64)) 轮廓 教授id(int) 用户id(int) 名字(varchar(64)) 姓氏(varchar(64)) …(其他领域) 我将变量放入两个不同的数组($data1) 模型是这样的:

  • 问题内容: 我创建了一个数据库名称movielibrarysystem,其中有3个表。 分别是类型,发布者和电影..​​.现在1个发布者可以有很多电影,而1个电影则有很多类型..在movie表中,发布者ID和typeid都充当外键。 我的问题是,如何在电影表中插入数据…我已经将数据插入到发行商和类型表中,但是我无法插入电影表中。 问题答案: 这就是你要做的。首先,发行人与电影之间的关系是一对多的-

  • 问题内容: 我正在使用SQL Server 2005。 我正在将数据从当前数据库(单个表)迁移到新数据库(规范化-许多表)。在新数据库中,我有一个基表(我们称它为“ BaseTable”)和多个其他表(我们称它们为和)。来自旧数据库的某些数据将转到BaseTable,而另一些将转到其他两个。BaseTable与DependentA和DependentB都具有一对一关系,使用它们的ID作为外键。 所

  • 问题内容: 我试图了解如何使用JSON,在此过程中,我试图从Struts2操作获取JSON响应并显示响应警报。为此,我在JavaScript中使用Ajax POST,如下所示: 我的动作类包含一个字段,我试图将其作为JSON响应显示在警报中。但是我发现这样做有问题。我想念什么或做错什么? 我的动作课如下: 文件: 我的: 问题答案: 我通过在json结果上添加myMsg解决了我的问题。谢谢你的帮助

  • 我正在尝试将数据从签出视图插入到数据库中的两个表中。这是我的签出控制器: 还有结帐。刀身php: 但它只向order表插入数据,并出现以下错误: "传递给Illumate\Database\Query\Builder的参数1::插入()必须是类型数组,对象给定,在第45行的D:\xampp\htdocs\mieaceh\app\Http\Controller\CheckoutController.