【问题标题】:Node Express mssql returns json format without serializer and name of objectNode Express mssql 返回没有序列化程序和对象名称的 json 格式
【发布时间】:2016-10-09 20:18:24
【问题描述】:

我在应用程序的后端使用 Node express 从 MSSQL 数据库中检索数据。我想通过另一个用 Ember 制作的应用程序来访问这个服务器。 Ember DS 不知道如何处理 MSSQL 返回的格式。

MSSQL返回的格式为:

[{  
    "var1": "abc",
    "var2": "def",
    "var3": 3
{ 
    ... 
}]

而且,如果理解正确,应该是:

{
    'modelName': [{     
        "_id": 1
        "var1": "abc",
        "var2": "def",
        "var3": 3
    },
    { 
        ... 
    }]
}

因此,它缺少记录的名称 (modelName) 和 ID/序列号。我想在 Express 服务器中解决这个问题,而不是在 Ember 应用程序的序列化程序中。我找不到如何在 Express 中将 MSSQL 的 JSON 输出修改为 Ember 可以理解的。

API 端点如下所示:

var express = require('express');
var app = express();

app.use(function(req, res, next) {
    res.setHeader('Access-Control-Allow-Origin', 'http://localhost:4200');
    res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
    res.header('Access-Control-Allow-Methods', 'POST, GET, PUT, DELETE, OPTIONS');
    next();
});

app.get('/api/data', function (req, res) {

  var sql = require("mssql");

  // config for your database
  var config = {
    user: 'user',
    password: 'pass',
    server: 'mssql-server',
    database: 'db'
  };

  // connect to your database
  sql.connect(config, function (err) {

    if (err) console.log(err);

    // create Request object
    var request = new sql.Request();

    // query to the database and get the records
    request.query('SELECT * [dbo].[table]',
      function (err, recordset) {
        if (err) console.log(err)

        // send records as a response
        res.send(recordset);

    });
  });
});

var server = app.listen(8080, function () {
  console.log('Server is running on localhost:8080...');
});

我们将不胜感激!

我正在使用(并且必须坚持使用)MSSQL 14。

【问题讨论】:

  • 顺便说一句,我确实找到了这篇文章,它处理了同样的问题。只是找不到如何解决我的问题。 discuss.emberjs.com/t/…
  • 你的意思是你想把它作为一个 api 暴露在 express 服务器上吗?您应该发布将执行此操作的端点。
  • 我为 API 端点 @RobertMoskal 添加了代码

标签: sql-server json node.js express ember.js


【解决方案1】:

您只需将记录集转换为所需的格式。您可以遍历您的结果集并为每个结果集添加一个 _id

recordset = recordset.map(each=>{
     each._id = someFunction();
     return each;
 });
res.send({modelName: recordset})

然后将它们添加到结果的 modelName 键中。您可能会考虑使用 uuid 模块来分配唯一的 id。只需 npm install uuid。那么:

var uuid = require('uuid');
each._id = uuid.v4(); 

【讨论】:

  • 确实添加了对象的名称,有没有简单的方法来添加(随机)_id?
  • 这有点难。让我试试看。
猜你喜欢
  • 1970-01-01
  • 2011-08-14
  • 2019-03-01
  • 1970-01-01
  • 2018-03-24
  • 2019-02-27
  • 2016-06-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多