草庐IT

xml - Expressjs 响应作为 JSON 和 Xml

coder 2024-06-26 原文

我在做什么::我正在尝试为数据库中的数据集生成 json 和 xml 输出

Express Code::我在这里尝试 JSON 响应

var express = require('express')
  , async = require('async')
  , http = require('http')
  , mysql = require('mysql'); 
  var xml = require('xml');

var app = express();

var connection = mysql.createConnection({
    host: 'localhost',
    user: 'root',
    database: 'MyDatabase'
});

connection.connect();

// all environments
app.set('port', process.env.PORT || 3007);

app.use(express.static(__dirname + '/public/images'));

app.get('/Result/',function(request,response){
    var name_of_restaurants;

    async.series( [
        // Get the first table contents
        function ( callback ) {
            connection.query('SELECT * FROM mas_buf_type', function(err, rows, fields)
                {
                        console.log('Connection result error '+err);
                        name_of_restaurants = rows;
                        callback();
                });

 }

   // Send the response
], function ( error, results ) {


 response.json({'restaurants' : name_of_restaurants });



//response.set('Content-Type', 'text/xml');
//response.send(xml(name_of_restaurants));
} );

} );




http.createServer(app).listen(app.get('port'),function(){
        console.log('Express server listening on port'+app.get('port'));
});

我的输出::

{
    "restaurants": [
        {
            "Buf_Type_Id": 1,
            "Buf_Type_Name": "Breakfast"
        },
        {
            "Buf_Type_Id": 2,
            "Buf_Type_Name": "Lunch"
        },
        {
            "Buf_Type_Id": 3,
            "Buf_Type_Name": "Dinner"
        }
    ]
}

现在代替

 response.json({'restaurants' : name_of_restaurants });

我添加了这些行以获得 XML输出

response.set('Content-Type', 'text/xml');
response.send(xml(name_of_restaurants));

输出::

<Buf_Type_Id>1</Buf_Type_Id>
<Buf_Type_Id>2</Buf_Type_Id>
<Buf_Type_Id>3</Buf_Type_Id>

我的问题::

  • 很明显你可以看到两个输出是不同的,我找不到 xml 输出中的第二列
  • 如何解决这个问题
  • 我需要做哪些改变

{编辑}

var express = require('express')
  , async = require('async')
  , http = require('http')
  , mysql = require('mysql'); 
  var xml = require('xml');

var app = express();

var connection = mysql.createConnection({
    host: 'localhost',
    user: 'root',
    database: 'findmybuffet'
});

connection.connect();

// all environments
app.set('port', process.env.PORT || 3007);

app.use(express.static(__dirname + '/public/images'));

app.get('/Result/',function(request,response){
    var name_of_restaurants;

    async.series( [
        // Get the first table contents
        function ( callback ) {
            connection.query('SELECT * FROM mas_buf_type', function(err, rows, fields)
                {
                        console.log('Connection result error '+err);
                        name_of_restaurants = rows;
                        callback();
                });

 }

   // Send the response
], function ( error, results ) {


 //response.json({'restaurants' : name_of_restaurants });

response.set('Content-Type', 'text/xml');
//response.send(xml(name_of_restaurants));

response.send(xml({restaurants:[
    name_of_restaurants.map(function(r){
        return [ 
            { Buf_Type_Id: r.Buf_Type_Id },
            { Buf_Type_Name: r.Buf_Type_Name },
        ]
    })
]}));


} );

} );


http.createServer(app).listen(app.get('port'),function(){
        console.log('Express server listening on port'+app.get('port'));
});

输出::

<restaurants>
    <0>
        <Buf_Type_Id>1</Buf_Type_Id>
        <Buf_Type_Name>Breakfast</Buf_Type_Name>
    </0>
</restaurants>

我们也清楚地看到<0>正在生成....这不是必需的...如何删除它?

最佳答案

因此,我四处寻找适合您的更好的对象到 XML 映射器。在找到我喜欢的一个之前,我尝试了三个(它易于使用,并且对您的应用程序有意义)。抛弃旧的,使用object-to-xml相反:

var o2x = require('object-to-xml');

response.set('Content-Type', 'text/xml');
response.send(o2x({
    '?xml version="1.0" encoding="utf-8"?' : null,
    restaurants: {
        restaurant: name_of_restaurants
    }
}));

关于xml - Expressjs 响应作为 JSON 和 Xml,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21399572/

有关xml - Expressjs 响应作为 JSON 和 Xml的更多相关文章

  1. ruby-on-rails - 如何从 format.xml 中删除 <hash></hash> - 2

    我有一个对象has_many应呈现为xml的子对象。这不是问题。我的问题是我创建了一个Hash包含此数据,就像解析器需要它一样。但是rails自动将整个文件包含在.........我需要摆脱type="array"和我该如何处理?我没有在文档中找到任何内容。 最佳答案 我遇到了同样的问题;这是我的XML:我在用这个:entries.to_xml将散列数据转换为XML,但这会将条目的数据包装到中所以我修改了:entries.to_xml(root:"Contacts")但这仍然将转换后的XML包装在“联系人”中,将我的XML代码修改为

  2. ruby - RSpec - 使用测试替身作为 block 参数 - 2

    我有一些Ruby代码,如下所示:Something.createdo|x|x.foo=barend我想编写一个测试,它使用double代替block参数x,这样我就可以调用:x_double.should_receive(:foo).with("whatever").这可能吗? 最佳答案 specify'something'dox=doublex.should_receive(:foo=).with("whatever")Something.should_receive(:create).and_yield(x)#callthere

  3. ruby-on-rails - Rails HTML 请求渲染 JSON - 2

    在我的Controller中,我通过以下方式在我的index方法中支持HTML和JSON:respond_todo|format|format.htmlformat.json{renderjson:@user}end在浏览器中拉起它时,它会自然地以HTML呈现。但是,当我对/user资源进行内容类型为application/json的curl调用时(因为它是索引方法),我仍然将HTML作为响应。如何获取JSON作为响应?我还需要说明什么? 最佳答案 您应该将.json附加到请求的url,提供的格式在routes.rb的路径中定义。这

  4. ruby-on-rails - 每次我尝试部署时,我都会得到 - (gcloud.preview.app.deploy) 错误响应 : [4] DEADLINE_EXCEEDED - 2

    我是Google云的新手,我正在尝试对其进行首次部署。我的第一个部署是RubyonRails项目。我基本上是在关注thisguideinthegoogleclouddocumentation.唯一的区别是我使用的是我自己的项目,而不是他们提供的“helloworld”项目。这是我的app.yaml文件runtime:customvm:trueentrypoint:bundleexecrackup-p8080-Eproductionconfig.ruresources:cpu:0.5memory_gb:1.3disk_size_gb:10当我转到我的项目目录并运行gcloudprevie

  5. ruby - 字符串文字中的转义状态作为 `String#tr` 的参数 - 2

    对于作为String#tr参数的单引号字符串文字中反斜杠的转义状态,我觉得有些神秘。你能解释一下下面三个例子之间的对比吗?我特别不明白第二个。为了避免复杂化,我在这里使用了'd',在双引号中转义时不会改变含义("\d"="d")。'\\'.tr('\\','x')#=>"x"'\\'.tr('\\d','x')#=>"\\"'\\'.tr('\\\d','x')#=>"x" 最佳答案 在tr中转义tr的第一个参数非常类似于正则表达式中的括号字符分组。您可以在表达式的开头使用^来否定匹配(替换任何不匹配的内容)并使用例如a-f来匹配一

  6. ruby-on-rails - 如何使用 Rack 接收 JSON 对象 - 2

    我有一个非常简单的RubyRack服务器,例如:app=Proc.newdo|env|req=Rack::Request.new(env).paramspreq.inspect[200,{'Content-Type'=>'text/plain'},['Somebody']]endRack::Handler::Thin.run(app,:Port=>4001,:threaded=>true)每当我使用JSON对象向服务器发送POSTHTTP请求时:{"session":{"accountId":String,"callId":String,"from":Object,"headers":

  7. ruby-on-rails - 应用程序的名称是否可以作为变量使用? - 2

    当我创建一个Rails应用程序时,控制台:railsnewfoo我的代码可以使用字符串“foo”吗?puts"Yourapp'snameis"+app_name_bar 最佳答案 Rails.application.class将为您提供应用程序的全名(例如YourAppName::Application)。从那里您可以使用Rails.application.class.parent获取模块名称。 关于ruby-on-rails-应用程序的名称是否可以作为变量使用?,我们在StackOve

  8. ruby - 用 YAML.load 解析 json 安全吗? - 2

    我正在使用ruby2.1.0我有一个json文件。例如:test.json{"item":[{"apple":1},{"banana":2}]}用YAML.load加载这个文件安全吗?YAML.load(File.read('test.json'))我正在尝试加载一个json或yaml格式的文件。 最佳答案 YAML可以加载JSONYAML.load('{"something":"test","other":4}')=>{"something"=>"test","other"=>4}JSON将无法加载YAML。JSON.load("

  9. ruby-on-rails - 使用作为方法的值在 ruby​​ 中搜索哈希 - 2

    我在搜索我的值是方法的散列时遇到问题。我只是不想运行plan_type与键匹配的方法。defmethod(plan_type,plan,user){foo:plan_is_foo(plan,user),bar:plan_is_bar(plan,user),waa:plan_is_waa(plan,user),har:plan_is_har(user)}[plan_type]end目前如果我传入“bar”作为plan_type,所有方法都会运行,我怎么能只运行plan_is_bar方法呢? 最佳答案 这个变体怎么样?defmethod

  10. ruby-on-rails - 在 Ruby on Rails 中发送响应之前如何等待多个异步操作完成? - 2

    在我做的一些网络开发中,我有多个操作开始,比如对外部API的GET请求,我希望它们同时开始,因为一个不依赖另一个的结果。我希望事情能够在后台运行。我找到了concurrent-rubylibrary这似乎运作良好。通过将其混合到您创建的类中,该类的方法具有在后台线程上运行的异步版本。这导致我编写如下代码,其中FirstAsyncWorker和SecondAsyncWorker是我编写的类,我在其中混合了Concurrent::Async模块,并编写了一个名为“work”的方法来发送HTTP请求:defindexop1_result=FirstAsyncWorker.new.async.

随机推荐