小编Pat*_*mek的帖子

带有replacer函数的JSON.stringify中的奇怪行为

考虑一下:

var object = {date: new Date()};

JSON.stringify(object, function(key, value) {
    console.log('---');
    console.log('key:', key);
    console.log('value:', value);
    console.log('value instanceof Date:', value instanceof Date);

    return value;
});
Run Code Online (Sandbox Code Playgroud)

正如文件所说:

replacer参数可以是函数或数组.作为一个函数,它需要两个参数,键和值被字符串化.找到密钥的对象作为replacer的this参数提供.最初使用表示要进行字符串化的对象的空键调用它,然后为要进行字符串化的对象或数组上的每个属性调用它.

...

如果返回任何其他对象,则会以递归方式将对象字符串化为JSON字符串,并在每个属性上调用replacer函数,除非该对象是函数,在这种情况下,不会向JSON字符串添加任何内容.

但是如果你运行代码,你会得到这个:

---
key: 
value: { date: Fri Jan 10 2014 02:25:00 GMT+0100 (CET) }
value instanceof Date: false
---
key: date
value: 2014-01-10T01:25:00.262Z
value instanceof Date: false
Run Code Online (Sandbox Code Playgroud)

这意味着,在调用replacer函数之前,date属性已被字符串化.这是正常的行为还是我错过了什么?如何在Date不覆盖默认toJSON方法的情况下影响字符串化的格式?

谢谢!

编辑

根据回答和下一步的研究,文献似乎目前还不清楚,toJSON并且在更换器功能之前就已经被调用了.根据Pills的回复,这个片段应该可以完成这项任务:

var object = {date: new Date };

JSON.stringify(object, function(key, value) {
    if …
Run Code Online (Sandbox Code Playgroud)

javascript json

9
推荐指数
2
解决办法
1829
查看次数

如何从NodeJS/Tedious连接到SQL Azure?

我有一个SQL Azure数据库,我正在尝试从Azure Linux VM中运行的NodeJS应用程序连接到该数据库.当我在本地SQL数据库/本地机器上运行NodeJS时,一切正常.但是,当我从我的虚拟机运行时,我得到以下输出(我的跟踪输出加上繁琐的调试事件):

connected to XXXXXXX.database.windows.net:1433
State change: Connecting -> SentPrelogin
State change: SentPrelogin -> SentLogin7WithStandardLogin
connection to XXXXXXX.database.windows.net:1433 closed
State change: SentLogin7WithStandardLogin -> Final
Writing CSV files....
connection to XXXXXXX.database.windows.net:1433 closed
State change: Final -> Final
All Done!
Run Code Online (Sandbox Code Playgroud)

问题是没有出现任何错误,但连接似乎自动关闭.

有关这里可能发生的事情或我如何得出实际错误的任何想法?

node.js tedious azure-sql-database

3
推荐指数
1
解决办法
2465
查看次数

Node.js Tedious Rows是一个空数组,但RowCount是正确的

所以这是我正在运行的基本代码块.我已经按预期返回RowCount(现在只有5个项目)但是行返回为空数组.

难道我做错了什么?顺便说一句,我正在连接到SQL azure.我没有任何连接问题,我相信我已经把正确的选项(rowCollectionOnRequestCompletion为true).

有任何想法吗?

var Connection = require('tedious').Connection;
var Request = require('tedious').Request;

exports.list = function(req, res){
    var connection = new Connection({
    "userName": "myCoolUsername",
    "password": "SoMePa$$word",
    "server": "something.database.windows.net",
    "options": {
        "database": "mySampleDbName",
        "encrypt": true,
        "rowCollectionOnDone": true,
        "rowCollectionOnRequestCompletion": true
    }
});

connection.on('connect', function(err){
    //if no error, then we are good to go.
    if(err){
        console.log(err);
    }else
    {
        var request = new Request("SELECT * FROM Products", function(err, rowCount, rows){
            console.log(rowCount);
            res.send(rows);
        })
        connection.execSql(request);
    }
});
Run Code Online (Sandbox Code Playgroud)

sql-server node.js express tedious

2
推荐指数
1
解决办法
5500
查看次数