node.js的mysql模块query方法里的字符串拼接问题

我写了一个和mysql交互的Node.js。大致功能是,在浏览器端提交用户信息表单后,会在现有的表userInfo里插入一条用户记录;然后针对这条用户记录自动再生成一个表,该表的名称是根据这条记录的id动态生成的。

该部分我写的代码如下:

                    //上面的代码已经实现把一条新的用户记录插入到userInfo里了。

                        var userId;
            var tableName;
            db.query(//这里通过query方法获取这条新记录的id(因为id是自动自增生成的)
                "SELECT user_id FROM userInfo "+
                "WHERE identity=?",
                [dataObj.identity],
                function (err,rows) {
                    if (err) {
                        throw err;
                    }
                    else{
                        userId=rows[0].user_id;//获取的userId假设为0
                        console.log(userId);
                        tableName='user_'+userId;//tableName变量装入要生成的新表的名称'user_0'
                        console.log(tableName);//(1)

                    }
                }
            );
                        //(2)
            db.query(
                'CREATE TABLE IF NOT EXISTS '+tableName+//创建新表的时候表名使用tableName变量的内容'user_0'
                '(arti_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, '+
                'title VARCHAR(50) NOT NULL, '+
                'maintext LONGTEXT, '+
                'time TIMESTAMP)',
                function (err) {
                    if (err) {
                        throw err;
                    }
                    else{
                        console.log("New user's article table has successfully created.")
                    }
                }  
            );

运行成功,但是查看数据库,这张新表并不叫 user _0, 而是叫undefine。

现检查结果如下:
通过上述(1)语句可以看到装入表名的变量tableName确实是user_0.
所有语句不变,把tableName直接赋值为‘user_0’的话(即在(2)处加入tableName='user_0'),得到的新表表名就是user_0了。

请问为什么会这样呢?我一定要通过动态获取id再给tableName赋值,怎样才能实现正确结果呢?

0

1个回答

貌似是非阻塞的原因,,也就是异步,,他不会等待上面的查询执行完毕就会执行下面的

1
u011218527
阿琛Bonnie 真的是这样!太感谢了。。。我改成后面的query嵌套在前面query的回调函数里面就可以了。
3 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
nodejs,async同步执行方法
nodejs,async同步执行方法
nodejs之mysql错误集合
1-----------如果报以下错:The MySQL server is running with the --secure-file-priv option so it cannot execute this statement;查看以下权限show variables like '%secure%'#+--------------------------+-------+| Variabl...
自己发现的nodejs服务的问题--1查询语句的嵌套问题+接受的数据该怎么用
/**  * Created by 18468 on 2017/3/1.  */ var http=require('http'); var mysql=require('mysql'); var qs=require('querystring'); http.createServer(function(req,res){     res.writeHead(200,{'conten
node.js 加载mysql模块问题
最近在学习node.js,学到node.js连接mysql数据库时出现了cannot find module 'mysql'问题,网上搜发现是自己没有安装mysql模块。 安装mysql模块步骤: 打开命令提示符 --> 输入 npm install mysql 即可安装mysql模块,这里有一个问题,就是安装路径与nodejs的安装路径不在一起,这个可以通过命令修改安装路径,我就不写了。
使用node连接mySQL,封装自定义模块供外部调用
当我们使用node.js写网站的时候,难免会有一些操作让我们连接数据库,并对数据库经行操作,但是每次都需要对数据库进行连接与断开连接,所以,我写下这篇文章,将连接数据库的操作封装到一个模块中,然后简化外部调用的代码。废话不多说,直接看node.js怎么连接mysql: 1、使用npm安装MySQL模块: $ npm install mysql -S 2、在你需要对数据库进行操作的地方引入模块...
<a>标签中href和onclick传递this对象的实现方法
本文介绍下html中的A标签通过href与onclick传递this对象的方法,有需要的朋友,可以参考下。 在blog的后台管理中允许为一个分类添加一个地址,但是不好添加onclick事件。想传递当前对象给一个函数,于是将这个URL写成"Javascript:shoControlSidebar(this)",实现不了,传递过去的参数是一个对象,但是却得不到任何其他信息。 想得到inne
使用node.js中的async模块进行数据库的同步操作
遇到的问题在上一篇博客中就说明了,下面这段代码只是为以后做个笔记 exports.monthcount = (req, res) =&amp;gt; { let result = {status: 0, message: '登录成功'} // 月份 let monthArray = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12] // 每月有多少天 l...
Async.js解决Node.js操作MySQL的回调大坑
由于JavaScript语言异步特性,在使用Node.js执行很多操作时都会使用到回调函数,其中就包括访问数据库。如果代码中的业务逻辑稍微复杂一点,回调一层层嵌套,那么代码很容易进入Callback Hell,无论对写代码的人还是阅读代码的人,都是精神上的折磨。
nodejs mysql query 方法 第二个参数默认值
let db = {}; db.pool = mysql.createPool({             host     : this.config.host,             user     : this.config.user,             password : this.config.password,             database : this.co...
在Node.js使用mysql模块时遇到的坑
用到了MySQL数据库,在本地测试均没神马问题。放上服务器运行一段时间后,偶然发现打开页面的时候页面一直处于等待状态,直到Nginx返回超时错误。
nodejs 操作数据库,错误处理
client.query("update ssc_bets set odds=1 where id=?",[bet.id], function (err, result) { if (err) { // 普通出错 if (err.number == 1062) { // 数据已经存在 log(data.numb
前台常用的处理形式(包含特殊HTML、JQUERY的用法)
1、for 属性规定 label 与哪个表单元素绑定。 点击“是”文字时,相当于点击id为isSealed1的radio。 "isSealed1" type="radio"/>label for="isSealed1">是label> "isSealed0" type="radio"/>label for="isSealed0">否label> 2、判断某个radio是否被选中 $
Nodejs教程13:URL模块
示例代码请访问我的GitHub: https://github.com/chencl1986/nodejs-tutorial url.parse URL模块用于对URL的解析,常用的是url.parse方法。 假设有一个url为https://www.google.com:8080/a/b?x=1&amp;amp;amp;amp;y=2&amp;amp;amp;amp;y=3&amp;amp;amp;amp;y=4,可以用url.parse方法进行解析。 示例代码:...
nodejs连接mysql8.0.13时报错的处理方法
在用nodejs连接本地数据库的时候,下载了mysql8.0.13的版本,(这个版本的坑真的很多,重装了好几遍才成功),结果尝试连接数据库的时候报了这个错误:Error: ER_NOT_SUPPORTED_AUTH_MODE: Client does not support authentication protocol requested by server; consider upgradin...
在nodejs中使用mysql
安装 使用在npmjs.com中搜索即可 npm i mysql 使用 var mysql = require('mysql'); // 创建连接 var connection = mysql.createConnection({ host : 'localhost', user : 'me', password : 'secret', ...
(原创)node.js入门之二:mysql的使用-Mac环境开发
上一章手把手跟大家完成了Mac环境下nodejs的安装,以及webstorm的安装和使用,我们已经建立了自己的工程,可以在html上通过jquery的post请求,或者iOS上通过afnetworking/ASIHttpRequest来访问我们的服务器http://localhost:3000完成数据交互。 显然简单的数据处理满足不了一款真正应用,一个数据库显然是必须的。今天我们就了解一下node
nodejs问题
3. mysql连接过程遇到 Error: Cannot enqueue Handshake after invoking quit. Error: Cannot enqueue Handshake after already enqueuing a Handshake. 意味着我打开一个链接的时候不能在打开其他的链接。 因为把mysql单独写在了一个模块里面,每一次我每一次我调用
nodejs连接mysql数据库简单封装-mysql模块
安装mysql模块 npm install mysql 测试是否连接成功 mysql.js代码: var mysql = require('mysql'); var connection = mysql.createConnection({ host : 'localhost', user : 'root', password : '123456',
NODE.JS 连接 MySql 问题之 显示找不到 mysql
这个问题的原因是node.js外部引入包会在 node_module里面进行查找,如果你安装node.js的目录和项目文件的目录不一致,那么就无法引入外部包。因此,只需要在命令行中进入你的项目文件根目录,然后 npm install mysql 即可解决。...
Node.js ECMAScript6 字符串的扩展函数,字符串的拼接,字符串以...开头/结尾
demo.js: 'use strict' // 使用严格模式 ECMAScript5 (后端Node.js不需要考虑兼容性问题) var foo = 'aghrjieowngfdabhugre'; // 字符串的扩展函数 console.log(foo.includes('eown')); // true 是否包含 console.log(foo.startsWith('agh')
node.js操作mysql 回调返回值
刚入门node.js的朋友可能不知道node.js操作mysql 是如何回调返回值得,我给你大家介绍介绍简介和安装 测试MySQL 认识一下Connection Options MYSQL CURD 插入 更新 查询 删除 Nodejs 调用带out参数的存储过程,并得到out参数返回值 结束数据库连接两种方法和区别 连接池Pooling connections 创建 其它连接池配置选项 释放 使用
nodejs mysql 数据查询例子
1、安装nodejs2、安装mysql npm包地址:https://github.com/felixge/node-mysqlnpm install mysql 3、相应API查看及调用:var mysql = require(‘mysql’); var connection = mysql.createConnection({ host : ‘localhost’,
ES6的新方法——字符串拼接
我们以前使用单引号或双引号来来拼接,在es6中使用 `
实战学习NodeJS建站(4)—封装 SqlClient 实现对MySql的访问
1、db_config.js 首先,对数据库的访问需要配置数据库连接参数:host、port、用户名、密码;  /** * 需要安装mysql组件 * 类似于安装express,执行:npm install mysql 即可; * 在node_modules 目录下多出 mysql 模块 *(或者从其他项目中拷贝进来也可以) */ var mysql = require('mysql'); v
Node.js中path模块对路径的操作
在node.js中,提供了一个path某块,在这个模块中,提供了许多使用的,可被用来处理与转换路径的方法与属性。下面我们就来对这些方法与属性做一下介绍。 (1)normalize方法 此方法用于将非标准路径的字符串转化成标准路径字符串,在转换过程中执行如下的操作 1、解析路径中的".."和"."字符串,返回解析后的标准路径。 2、将多个斜杠字符串转换为一个斜杠字符串,例如将"\\"转换为"
nodejs mysql 执行多条sql语句
执行多条查询语句 为了安全起见,默认情况下是不允许执行多条查询语句的。要使用多条查询语句的功能,就需要在创建数据库连接的时候打开这一功能:   var connection = mysql.createConnection( { multipleStatements: true } );   这一功能打开以后,你就可以像下面的例子一样同时使用多条查询语句:  
final 修饰方法中参数的问题
一、赋值的方式  1、可以定义变量时直接赋值  2、可以在代码块中进行赋值(静态代码块和构造代码块)  3、可以再构造方法中进行赋值。 总结起来,就是要在对象创建之前完成赋值的过程。   二、值能不能改变的问题 1、对于基本数据类型的,如byte short char int 等,赋值后被final修饰的变量不能改变。 2、对于引用数据类型,地址不能改变,但是地址中的值可以发生改变...
nodejs连数据库时出现的异步问题
最近,在用nodejs连接mongoDB数据库时出现了一个特别蛋疼的问题,我们先来看代码 下面我来解释一下代码——这个取名叫mongoB.js的文件主要实现监听来着客户端的post请求,这个请求是客户端页面通过window.onload方法再使用原生的XMLHttpRequest对象实现的。首先,js通过http模块监听指定端口,在获取到客户端请求的时候,通过判断参数来选择将要对数据库进行的操作—
node.js 获取url中的各个参数
如果url为:http://127.0.0.1:8020/?param=10&amp;amp;id=code 1,首先引入模块: var http = require('http'); var url = require(&quot;url&quot;); var querystring = require(&quot;querystring&quot;); 2,创建服务并获取参数:   http.createServer(f...
node.js mysql
var express = require('express'); var router = express.Router(); var app = require('../app.js'); var mysql = require('mysql'); var connection = mysql.createConnection({ host:'localhost', user:'root', password:'kalo376365', database:'test' }); var sql = 'SELECT * FROM user'; var addSql = 'INSERT INTO user(id,name,age,gender) VALUES(?,?,?,?)'; connection.connect(); /* GET users listing. */ router.get('/getSecret/:id',function(req,res,next){ console.log('function 1') next() }, function(req, res, next) { res.send('respond with a secret'+req.params.id); console.log('function 2') connection.query(sql, function(err, result){ if (err) { console.log(err.message); app.writeLog('error','query database', {message: err.message}); return; } app.writeLog('info', 'query database', {result:result}); }); });
Node.js之http模块、url模块菜鸟级理解
Node.js之http模块、url模块学习理解
JavaScript字符串拼接的性能问题
这个问题不知从何而生,以前我很少关注细节,今天突然想到,字符串拼接如何高效,或者有高效一说吗?因为我们知道,不同的浏览器引擎不同,如Chrome/Mozilla FF/MSIE,他们都是使用的自己的内核,因此优化程度都不相同。字符串拼接,我想大部分人都会直接使用 + 操作符,尤其是前端操作DOM的时候,的确很方便。那么很多人是不是会想,最简单的代码肯定是性能最差的,最没有技术含量的?不见得,代码的高
MySQL中的字符串拼接函数详解
CONCAT函数 功能:连接一个或多个字符串,然后返回连接后的字符串。 函数形式:CONCAT(str1,str2,…)示例1:单个字符串连接mysql> select concat('Hello'); +-----------------+ | concat('Hello') | +-----------------+ | Hello | +-----------------
nodejs连接mysql之使用连接池pool
不使用连接池的坏处想必试过的人都已经知道了,我这里给出一个使用连接池的范例,实现的较为简单,最好不要直接用。连接池范例://导入所需模块 var mysql=require("mysql"); //导入配置文件 var cfg =require("./config/db"); var pool = mysql.createPool({ host: cf
node.js学习笔记(10)--mysql模块连接mysql数据库
1.安装 我们需要一个mysql 和node环境,这里我自己的电脑没有安装mysql,用navicat连的同事的。 注意如果碰到这个 “Host''xxx.xx.xxx.xxx''isnot allowedtoconnectto this MySQL server" 。 那么在安装的那台电脑上修改 mysql 数据库中的 user 表 里的 host 项  从"loc
node.js中mysql数据库连接池
在MySQL模块中,使用createPool方法创建连接池,在建立了连接池之后,可以直接使用连接池对象的getConnection方法从连接池中获取一个连接,如果连接池中没有可用连接,将隐式的建立一个数据库连接。   connection.release() 当一个连接不需要使用时,使用该方法将其归还到连接池中   connection.destroy() 当一个连接不需要使用且需要从连接池中
解决nodejs安装不了mysql模块
尝试过各种办法,包括 npm install mysql , npm install mysql  -g ,去到node.exe的文件夹下运行 npm install mysql ,或者重新安装node,但是统统不行,最后的最后,采用使用淘宝 NPM 镜像去安装,先 npm install -g cnpm然后再 cnpm install mysql 然后就成功安装了借鉴于http://www.r...
node.js(一)-----方法调用
1.同一个文件夹中的方法调用const http = require('http'); //导入http const hostname = '192.168.1.108'; //ip地址 随便写 如需要在局域网内,用手机访问,则需要将其设置为电脑的ipv4地址 const port = 3000; //端口号 const server = http.createServer((req...
nodejs连接mysql数据库支持事物封装-mysql模块
nodejs连接mysql数据库支持事物封装-mysql模块
node.js中同步/异步处理模块async解析
Async异步处理模块! 安装很简单,就跟普通的安装模块一样就行了 npm install --save-dev async 这样就安装成功了! 接下来就是引用了,在代码里引用模块: var async = require('async'); 这样引用也就ok了!在代码后面就可以轻松的用async这个对像模块了! 查了下官方文档,这个模块的方法实在是太多了!看的眼花…… 下面我们来谈...
文章热词 机器学习教程 Objective-C培训 交互设计视频教程 颜色模型 设计制作学习
相关热词 mysql关联查询两次本表 native底部 react extjs glyph 图标 区块链发币方 云计算方面的培训