为什么通过JSON.stringify转化出来的字符串创建记录会出错,而直写入内容{ id: 5, title: 'Some Title 5', body: 'Some body 5' }可以正常。
发布于 12 年前 作者 mrchi 5852 次浏览 最后一次编辑是 8 年前
var FastLegSBase = require('FastLegS');
var FastLegS = new FastLegSBase('mysql');

var connectionParams = {
    user: 'root', password: '',
    database: 'warship', host: 'localhost', port: 3306
}

FastLegS.connect(connectionParams);

var callback = function(err, results) {
    console.dir(err);
    console.dir(results);
}

var PlayerTables = FastLegS.Base.extend({
    tableName: 'player',
    primaryKey: 'id'
});

var info = JSON.stringify(player.info);
PlayerTables.create(info, callback);

为什么我通过JSON.stringify转化出来的字符串创建记录会出错,而直写入内容{ id: 5, title: ‘Some Title 5’, body: ‘Some body 5’ }可以正常。

8 回复

通过JSON.stringify转化出来的字符串同{ id: 5, title: ‘Some Title 5’, body: ‘Some body 5’ }有什么区别?

干嘛要调用JSON.stringfy转换成字符串? 如果create的参数要的是JSON object, 你放一个string, 当然会出错.

出错?有提示信息么?

有错误提示,看不懂

E:\Server\node_modules\FastLegS\lib\utils.js:30
    return _.include(columns, field.split('.')[0]);
                                    ^
TypeError: Object 0 has no method 'split'
    at fieldIsValid (E:\Server\node_modules\FastLegS\lib\utils.js:30:37)
    at E:\Server\node_modules\FastLegS\lib\utils.js:92:16
    at Function._.each._.forEach (E:\Server\node_modules\FastLegS\node_modules\underscore\underscore.js:81:22)
    at _.(anonymous function) [as each] (E:\Server\node_modules\FastLegS\node_modules\underscore\underscore.js:1069:39)
    at validFields (E:\Server\node_modules\FastLegS\lib\utils.js:91:15)
    at E:\Server\node_modules\FastLegS\lib\adapters\mysql\statements.js:83:17
    at Array.map (native)
    at Function._.map._.collect (E:\Server\node_modules\FastLegS\node_modules\underscore\underscore.js:97:56)
    at buildInsertFields (E:\Server\node_modules\FastLegS\lib\adapters\mysql\statements.js:82:14)
    at Object.exports.insert (E:\Server\node_modules\FastLegS\lib\adapters\mysql\statements.js:36:16)

create的参数要的应该就是一个json string我试过输入字符串可以正常运行。

TypeError: Object 0 has no method ‘split’ 的意思是,__field__变量没有一个叫__split__的方法。 __split__只有字符串才有的,而此时的__field__是一个数值型。

这个错误有可能是__FastLegS__模块的Bug,也有可能是因为其他地方的输入不正确而引发的。

我看了一下__FastLegS__模块的使用方法,你的代码中PlayerTables.create(info, callback); __create()__的第一个参数应该是一个__Object__或者__Array__的,而此时你的__info__是一个字符串,并没有按照规定来调用。

参考:http://didit-tech.github.com/FastLegS/

@leizongmin 呵呵,非常感谢!现在明白了。

回到顶部