Hướng dẫn write xml file nodejs - ghi tệp xml nodejs

Khi bạn nghĩ về Node.js, XML có lẽ là điều đầu tiên xuất hiện trong tâm trí. Nhưng có những trường hợp bạn có thể thấy bạn cần đọc hoặc viết XML từ ứng dụng Node.js. Không phải ngẫu nhiên rằng việc tìm kiếm cho XML XML trên NPM trả về hơn 3.400 kết quả; Có một bộ sưu tập đáng kể các gói liên quan đến XML chuyên về các cách làm việc khác nhau với XML.

Trong bài viết này, chúng tôi sẽ khám phá một số trường hợp sử dụng XML trong thế giới thực bằng một số gói NPM phổ biến nhất hiện có, bao gồm:

  • XML2js với Express-xml-Bodyparser
  • libxmljs2
  • Cheerio
  • SVGSON

Lưu ý rằng các ví dụ mã trong bài viết này là cho mục đích trình diễn. Công phu, mã mẫu làm việc có sẵn tại Briandesousa/Node-XML-Demo.

Nếu bạn muốn làm theo cùng với các hướng dẫn trong bài viết này, bạn có thể muốn bắt đầu bằng cách tạo một ứng dụng Express với Express-Generator. Chọn công cụ PUG View (Xem ví dụ mã được viết dưới dạng mẫu PUG).

Nhận XML qua HTTP

XML-RPC và các dịch vụ web SOAP từng là tiêu chuẩn để trao đổi dữ liệu giữa các ứng dụng, nhưng API JSON (tức là, REST, GraphQL) có tất cả trừ các dịch vụ XML bị trì hoãn.

Như có thể, vẫn có những trường hợp bạn có thể cần phải hiển thị API dựa trên XML để cho phép các ứng dụng khác cung cấp dữ liệu XML vào ứng dụng của bạn. May mắn thay, có rất nhiều gói trên NPM giúp dễ dàng tiêu thụ dữ liệu XML.

Một trong những gói XML phổ biến hơn là XML2JS và một trong những khung ứng dụng phổ biến hơn cho Node.js là Express. Đương nhiên, có một gói phần mềm trung gian Express, Express-xml-Bodyparser, gắn kết hai người này lại với nhau. Hãy để xây dựng một tuyến đường rõ ràng có thể nhận XML.

Đầu tiên, chúng ta cần cài đặt gói Express-XML-Bodyparser:

npm install express-xml-bodyparser

Sau đó thêm phần mềm trung gian Express-XML-Bodyparser vào ứng dụng Express. Theo mặc định, phần mềm trung gian sẽ phân tích mọi yêu cầu đến trong đó nếu tiêu đề yêu cầu của ____ ____18 được đặt thành

// app.js
var express = require('express');
var xmlparser = require('express-xml-bodyparser');

var app = express();
app.use(xmlparser());
// other Express middleware and configurations
9.

// app.js
var express = require('express');
var xmlparser = require('express-xml-bodyparser');

var app = express();
app.use(xmlparser());
// other Express middleware and configurations

Thêm tuyến

// routes/xml2js.js 
router.post('/xml2js/customer', function(req, res, next) {
  console.log('Raw XML: ' + req.rawBody);
  console.log('Parsed XML: ' + JSON.stringify(req.body));
  if (req.body.retrievecustomer) {
    var id = req.body.retrievecustomer.id;
    res.send(`${id}Bob Smith`);
  } else {
    res.status(400).send('Unexpected XML received, missing ');
  }
});
0 nhận được yêu cầu XML:

// routes/xml2js.js 
router.post('/xml2js/customer', function(req, res, next) {
  console.log('Raw XML: ' + req.rawBody);
  console.log('Parsed XML: ' + JSON.stringify(req.body));
  if (req.body.retrievecustomer) {
    var id = req.body.retrievecustomer.id;
    res.send(`${id}Bob Smith`);
  } else {
    res.status(400).send('Unexpected XML received, missing ');
  }
});

Để kiểm tra tuyến đường của chúng tôi, chúng tôi có thể viết một số JavaScript phía máy khách gửi yêu cầu XML:

// views/xml2js.pug
fetch('/xml2js/customer', {
  method: 'POST',
  headers: {
    'Content-Type': 'text/xml'
  },
  body: '39399444'
})
.then(response => {
  console.log('Response status: ' + response.status);
  return response.text();
})
.then(responseText => console.log('Response text: ' + responseText)
.catch(error => console.log('Error caught: ' + error));

Tuyến đường trả về phản hồi XML. Nếu bạn xem đầu ra bảng điều khiển máy chủ, bạn có thể thấy thân yêu cầu mà máy chủ nhận được:

Raw XML: 39399444
Parsed XML: {"retrievecustomer":{"id":["39399444"]}}

Đợi một chút-Bạn có nhận thấy một cái gì đó khác nhau giữa XML RAW đã nhận được và đối tượng mà phần mềm trung gian Express-xml-Bodyparser đã trả về không?

XML RAW có thẻ XML

// routes/xml2js.js 
router.post('/xml2js/customer', function(req, res, next) {
  console.log('Raw XML: ' + req.rawBody);
  console.log('Parsed XML: ' + JSON.stringify(req.body));
  if (req.body.retrievecustomer) {
    var id = req.body.retrievecustomer.id;
    res.send(`${id}Bob Smith`);
  } else {
    res.status(400).send('Unexpected XML received, missing ');
  }
});
1 trong trường hợp lạc đà, nhưng khóa
// routes/xml2js.js 
router.post('/xml2js/customer', function(req, res, next) {
  console.log('Raw XML: ' + req.rawBody);
  console.log('Parsed XML: ' + JSON.stringify(req.body));
  if (req.body.retrievecustomer) {
    var id = req.body.retrievecustomer.id;
    res.send(`${id}Bob Smith`);
  } else {
    res.status(400).send('Unexpected XML received, missing ');
  }
});
2 trên đối tượng JSON là chữ thường. Điều này đang xảy ra bởi vì phần mềm trung gian Express-xml-Bodyparser đang định cấu hình trình phân tích cú pháp XML2JS, bao gồm đặt tùy chọn chuyển đổi tất cả các thẻ XML thành chữ thường.

Chúng tôi muốn các thuộc tính của đối tượng JSON khớp chính xác với các thẻ XML trong yêu cầu ban đầu. May mắn thay, chúng tôi có thể chỉ định các tùy chọn XML2JS của riêng mình và ghi đè các mặc định được cung cấp bởi phần mềm trung gian.

Sửa đổi phần mềm trung gian

// routes/xml2js.js 
router.post('/xml2js/customer', function(req, res, next) {
  console.log('Raw XML: ' + req.rawBody);
  console.log('Parsed XML: ' + JSON.stringify(req.body));
  if (req.body.retrievecustomer) {
    var id = req.body.retrievecustomer.id;
    res.send(`${id}Bob Smith`);
  } else {
    res.status(400).send('Unexpected XML received, missing ');
  }
});
3 đã được thêm vào ứng dụng Express trước đó để bao gồm một đối tượng cấu hình với tùy chọn
// routes/xml2js.js 
router.post('/xml2js/customer', function(req, res, next) {
  console.log('Raw XML: ' + req.rawBody);
  console.log('Parsed XML: ' + JSON.stringify(req.body));
  if (req.body.retrievecustomer) {
    var id = req.body.retrievecustomer.id;
    res.send(`${id}Bob Smith`);
  } else {
    res.status(400).send('Unexpected XML received, missing ');
  }
});
4 được đặt thành
// routes/xml2js.js 
router.post('/xml2js/customer', function(req, res, next) {
  console.log('Raw XML: ' + req.rawBody);
  console.log('Parsed XML: ' + JSON.stringify(req.body));
  if (req.body.retrievecustomer) {
    var id = req.body.retrievecustomer.id;
    res.send(`${id}Bob Smith`);
  } else {
    res.status(400).send('Unexpected XML received, missing ');
  }
});
5:

// app.js
app.use(xmlparser({
  normalizeTags: false
}));

Chạy lại mã phía máy khách và xem nhật ký bảng điều khiển máy chủ. Các tên thẻ bây giờ sẽ khớp giữa đối tượng JSON RAW XML và Parsed JSON:

Raw XML: 39399444
Parsed XML: {"retrieveCustomer":{"id":["39399444"]}}

Gói XML2JS hiển thị một số tùy chọn khác cho phép bạn tùy chỉnh cách XML được phân tích cú pháp. Xem XML2JS trên NPM để biết danh sách đầy đủ các tùy chọn.

Xác thực XML với các lược đồ

Một cách sử dụng phổ biến khác của XML là một định dạng để trao đổi dữ liệu giữa các ứng dụng khác nhau, đôi khi giữa các tổ chức khác nhau. Thông thường, lược đồ XML (XSD) được sử dụng để xác định cấu trúc tin nhắn XML mà mỗi ứng dụng sẽ mong đợi gửi và nhận. Mỗi ứng dụng xác nhận dữ liệu XML đến so với lược đồ.

Dữ liệu XML có thể được truyền giữa các ứng dụng theo nhiều cách khác nhau. Ví dụ: các ứng dụng có thể nhận XML qua kết nối HTTP hoặc thông qua tệp phẳng được lưu vào hệ thống tệp qua kết nối SFTP.

Mặc dù có khá nhiều gói NPM có sẵn để làm việc với XML, các tùy chọn bị hạn chế hơn một chút khi bạn cũng yêu cầu xác thực Lược đồ XML. Hãy cùng xem gói LibXMLJS2, hỗ trợ xác thực lược đồ XML. Chúng tôi sẽ viết một số mã để tải lược đồ XML từ hệ thống tệp máy chủ và sử dụng nó để xác thực một số dữ liệu XML đến.

Bắt đầu bằng cách tạo lược đồ XML trong thư mục

// routes/xml2js.js 
router.post('/xml2js/customer', function(req, res, next) {
  console.log('Raw XML: ' + req.rawBody);
  console.log('Parsed XML: ' + JSON.stringify(req.body));
  if (req.body.retrievecustomer) {
    var id = req.body.retrievecustomer.id;
    res.send(`${id}Bob Smith`);
  } else {
    res.status(400).send('Unexpected XML received, missing ');
  }
});
6 trong thư mục gốc của ứng dụng của bạn:


  
    
      
        
        
        
      
      
    
  

Cài đặt gói libxmljs2:

npm install libxmljs2

Tạo tuyến đường

// routes/xml2js.js 
router.post('/xml2js/customer', function(req, res, next) {
  console.log('Raw XML: ' + req.rawBody);
  console.log('Parsed XML: ' + JSON.stringify(req.body));
  if (req.body.retrievecustomer) {
    var id = req.body.retrievecustomer.id;
    res.send(`${id}Bob Smith`);
  } else {
    res.status(400).send('Unexpected XML received, missing ');
  }
});
7 mới:

// routes/libxmljs2.js
var express = require('express');
var router = express.Router();
var libxmljs = require('libxmljs2');
var fs = require('fs');
var path = require('path');

var router = express.Router();

router.post('/libxmljs2/validateSessionXml', (req, res, next) => {
  var xmlData = req.body;

  // parse incoming XML data
  var xmlDoc = libxmljs.parseXml(xmlData);  

  // load XML schema from file system
  var xmlSchemaDoc = loadXmlSchema('session-info.xsd');

  // validate XML data against schema
  var validationResult = xmlDoc.validate(xmlSchemaDoc);

  // return success or failure with validation errors
  if (validationResult) {
    res.status(200).send('validation successful');
  } else {
    res.status(400).send(`${xmlDoc.validationErrors}`);
  }  
});

function loadXmlSchema(filename) {
  var schemaPath = path.join(__dirname, '..', 'schemas', filename);
  var schemaText = fs.readFileSync(schemaPath, 'utf8');
  return libxmljs.parseXml(xmlSchema); 
}

Mẹo: Nếu bạn vẫn đang sử dụng phần mềm trung gian Express-XML-Bodyparser từ ví dụ trước, bạn có thể cần thay đổi dòng 2 để sử dụng

// routes/xml2js.js 
router.post('/xml2js/customer', function(req, res, next) {
  console.log('Raw XML: ' + req.rawBody);
  console.log('Parsed XML: ' + JSON.stringify(req.body));
  if (req.body.retrievecustomer) {
    var id = req.body.retrievecustomer.id;
    res.send(`${id}Bob Smith`);
  } else {
    res.status(400).send('Unexpected XML received, missing ');
  }
});
8 thay vì
// routes/xml2js.js 
router.post('/xml2js/customer', function(req, res, next) {
  console.log('Raw XML: ' + req.rawBody);
  console.log('Parsed XML: ' + JSON.stringify(req.body));
  if (req.body.retrievecustomer) {
    var id = req.body.retrievecustomer.id;
    res.send(`${id}Bob Smith`);
  } else {
    res.status(400).send('Unexpected XML received, missing ');
  }
});
9 để chuyển
// views/xml2js.pug
fetch('/xml2js/customer', {
  method: 'POST',
  headers: {
    'Content-Type': 'text/xml'
  },
  body: '39399444'
})
.then(response => {
  console.log('Response status: ' + response.status);
  return response.text();
})
.then(responseText => console.log('Response text: ' + responseText)
.catch(error => console.log('Error caught: ' + error));
0 và thay vào đó truy cập chuỗi yêu cầu thô.
: If you are still using the express-xml-bodyparser middleware from the previous example, you may need to change line 2 to use
// routes/xml2js.js 
router.post('/xml2js/customer', function(req, res, next) {
  console.log('Raw XML: ' + req.rawBody);
  console.log('Parsed XML: ' + JSON.stringify(req.body));
  if (req.body.retrievecustomer) {
    var id = req.body.retrievecustomer.id;
    res.send(`${id}Bob Smith`);
  } else {
    res.status(400).send('Unexpected XML received, missing ');
  }
});
8 instead of
// routes/xml2js.js 
router.post('/xml2js/customer', function(req, res, next) {
  console.log('Raw XML: ' + req.rawBody);
  console.log('Parsed XML: ' + JSON.stringify(req.body));
  if (req.body.retrievecustomer) {
    var id = req.body.retrievecustomer.id;
    res.send(`${id}Bob Smith`);
  } else {
    res.status(400).send('Unexpected XML received, missing ');
  }
});
9 to by pass the
// views/xml2js.pug
fetch('/xml2js/customer', {
  method: 'POST',
  headers: {
    'Content-Type': 'text/xml'
  },
  body: '39399444'
})
.then(response => {
  console.log('Response status: ' + response.status);
  return response.text();
})
.then(responseText => console.log('Response text: ' + responseText)
.catch(error => console.log('Error caught: ' + error));
0 and access the raw request string instead.

Trên dòng 14, chức năng LibXMLJS2 từ

// views/xml2js.pug
fetch('/xml2js/customer', {
  method: 'POST',
  headers: {
    'Content-Type': 'text/xml'
  },
  body: '39399444'
})
.then(response => {
  console.log('Response status: ' + response.status);
  return response.text();
})
.then(responseText => console.log('Response text: ' + responseText)
.catch(error => console.log('Error caught: ' + error));
1 phân tích XML trong yêu cầu. Nó trả về một đối tượng
// views/xml2js.pug
fetch('/xml2js/customer', {
  method: 'POST',
  headers: {
    'Content-Type': 'text/xml'
  },
  body: '39399444'
})
.then(response => {
  console.log('Response status: ' + response.status);
  return response.text();
})
.then(responseText => console.log('Response text: ' + responseText)
.catch(error => console.log('Error caught: ' + error));
2, hiển thị hàm
// views/xml2js.pug
fetch('/xml2js/customer', {
  method: 'POST',
  headers: {
    'Content-Type': 'text/xml'
  },
  body: '39399444'
})
.then(response => {
  console.log('Response status: ' + response.status);
  return response.text();
})
.then(responseText => console.log('Response text: ' + responseText)
.catch(error => console.log('Error caught: ' + error));
3 chấp nhận một
// views/xml2js.pug
fetch('/xml2js/customer', {
  method: 'POST',
  headers: {
    'Content-Type': 'text/xml'
  },
  body: '39399444'
})
.then(response => {
  console.log('Response status: ' + response.status);
  return response.text();
})
.then(responseText => console.log('Response text: ' + responseText)
.catch(error => console.log('Error caught: ' + error));
2 khác chứa lược đồ XML. Hàm xác thực sẽ trả về
// views/xml2js.pug
fetch('/xml2js/customer', {
  method: 'POST',
  headers: {
    'Content-Type': 'text/xml'
  },
  body: '39399444'
})
.then(response => {
  console.log('Response status: ' + response.status);
  return response.text();
})
.then(responseText => console.log('Response text: ' + responseText)
.catch(error => console.log('Error caught: ' + error));
5 hoặc chuỗi chứa danh sách các lỗi xác thực. Trên các dòng 23 Ném27, chúng tôi trả về một phản hồi thích hợp dựa trên kết quả xác thực.

Hàm

// views/xml2js.pug
fetch('/xml2js/customer', {
  method: 'POST',
  headers: {
    'Content-Type': 'text/xml'
  },
  body: '39399444'
})
.then(response => {
  console.log('Response status: ' + response.status);
  return response.text();
})
.then(responseText => console.log('Response text: ' + responseText)
.catch(error => console.log('Error caught: ' + error));
6 trên dòng 30 tải lược đồ XML từ hệ thống tệp máy chủ bằng cách sử dụng các mô -đun tiêu chuẩn Node.js
// views/xml2js.pug
fetch('/xml2js/customer', {
  method: 'POST',
  headers: {
    'Content-Type': 'text/xml'
  },
  body: '39399444'
})
.then(response => {
  console.log('Response status: ' + response.status);
  return response.text();
})
.then(responseText => console.log('Response text: ' + responseText)
.catch(error => console.log('Error caught: ' + error));
7 và
// views/xml2js.pug
fetch('/xml2js/customer', {
  method: 'POST',
  headers: {
    'Content-Type': 'text/xml'
  },
  body: '39399444'
})
.then(response => {
  console.log('Response status: ' + response.status);
  return response.text();
})
.then(responseText => console.log('Response text: ' + responseText)
.catch(error => console.log('Error caught: ' + error));
8. Một lần nữa, chúng tôi đang sử dụng hàm
// views/xml2js.pug
fetch('/xml2js/customer', {
  method: 'POST',
  headers: {
    'Content-Type': 'text/xml'
  },
  body: '39399444'
})
.then(response => {
  console.log('Response status: ' + response.status);
  return response.text();
})
.then(responseText => console.log('Response text: ' + responseText)
.catch(error => console.log('Error caught: ' + error));
1 để phân tích các nội dung của tệp lược đồ vào một đối tượng
// views/xml2js.pug
fetch('/xml2js/customer', {
  method: 'POST',
  headers: {
    'Content-Type': 'text/xml'
  },
  body: '39399444'
})
.then(response => {
  console.log('Response status: ' + response.status);
  return response.text();
})
.then(responseText => console.log('Response text: ' + responseText)
.catch(error => console.log('Error caught: ' + error));
2. Các lược đồ XML chỉ là tài liệu XML vào cuối ngày.

Bây giờ chúng tôi đã triển khai một tuyến đường, chúng tôi có thể viết một số JavaScript phía máy khách đơn giản để kiểm tra tuyến đường của chúng tôi với yêu cầu XML hợp lệ:

// app.js
var express = require('express');
var xmlparser = require('express-xml-bodyparser');

var app = express();
app.use(xmlparser());
// other Express middleware and configurations
0

Chúng tôi cũng có thể gửi yêu cầu XML không hợp lệ và quan sát các lỗi xác thực được trả về:

// app.js
var express = require('express');
var xmlparser = require('express-xml-bodyparser');

var app = express();
app.use(xmlparser());
// other Express middleware and configurations
1

Các thông báo lỗi được trả về từ chức năng LibXMLJS2 từ

// views/xml2js.pug
fetch('/xml2js/customer', {
  method: 'POST',
  headers: {
    'Content-Type': 'text/xml'
  },
  body: '39399444'
})
.then(response => {
  console.log('Response status: ' + response.status);
  return response.text();
})
.then(responseText => console.log('Response text: ' + responseText)
.catch(error => console.log('Error caught: ' + error));
3 khá chi tiết; Tuy nhiên, định dạng thông báo lỗi gây khó khăn cho việc phân tích các thông báo lỗi riêng lẻ và ánh xạ chúng để kết thúc văn bản thân thiện với người dùng. Ngoài ra, có rất ít mã cần thiết để xác nhận XML theo lược đồ.

Thao tác nội dung HTML

Điều gì sẽ xảy ra nếu ứng dụng của bạn cần thao túng HTML? Không giống như các ví dụ chúng tôi đề cập đến nay, HTML về mặt kỹ thuật không tuân thủ đặc tả XML.

Có một số gói NPM chuyên xử lý các sắc thái của HTML so với XML. Một trong số đó là Cheerio. Hãy cùng xem cách chúng ta có thể sử dụng Cheerio để đọc, thao túng và trả lại một đoạn HTML.

Bắt đầu bằng cách cài đặt gói Cheerio:

// app.js
var express = require('express');
var xmlparser = require('express-xml-bodyparser');

var app = express();
app.use(xmlparser());
// other Express middleware and configurations
2

Tạo tuyến đường

Raw XML: 39399444
Parsed XML: {"retrievecustomer":{"id":["39399444"]}}
2 mới:

// app.js
var express = require('express');
var xmlparser = require('express-xml-bodyparser');

var app = express();
app.use(xmlparser());
// other Express middleware and configurations
3

Trên dòng 8, thuộc tính yêu cầu

Raw XML: 39399444
Parsed XML: {"retrievecustomer":{"id":["39399444"]}}
3 được giải mã bằng hàm
Raw XML: 39399444
Parsed XML: {"retrievecustomer":{"id":["39399444"]}}
4 tích hợp. Chúng tôi phải mã hóa chuỗi HTML khi gửi và nhận nó trong yêu cầu JSON để tránh các ký tự đặc biệt, như trích dẫn kép, mâu thuẫn với cú pháp JSON.

Trên dòng 12, chức năng Cheerio từ

Raw XML: 39399444
Parsed XML: {"retrievecustomer":{"id":["39399444"]}}
5 được sử dụng để phân tích đoạn HTML. Hàm này trả về một đối tượng bộ chọn với API gần giống với API lõi jQuery.

Bộ chọn sau đó được sử dụng trên các dòng 15 Vang25 để định vị và trích xuất văn bản trong tất cả các ô bảng trong đoạn HTML. Hàm

Raw XML: 39399444
Parsed XML: {"retrievecustomer":{"id":["39399444"]}}
6 được cung cấp bởi bộ chọn được sử dụng trên các dòng 21 và 23 để sửa đổi đoạn HTML bằng cách thêm các thuộc tính
Raw XML: 39399444
Parsed XML: {"retrievecustomer":{"id":["39399444"]}}
7 mới.

Trên dòng 31, bộ chọn được sử dụng để trích xuất phần tử

Raw XML: 39399444
Parsed XML: {"retrievecustomer":{"id":["39399444"]}}
8 từ đoạn HTML và trả về nó dưới dạng chuỗi HTML. Ngay cả khi đoạn HTML được thông qua trong yêu cầu không chứa các thẻ
Raw XML: 39399444
Parsed XML: {"retrievecustomer":{"id":["39399444"]}}
9 hoặc
// app.js
app.use(xmlparser({
  normalizeTags: false
}));
0, Cheerio tự động quấn đoạn HTML thành một tài liệu HTML có cấu trúc đúng. Điều này xảy ra khi hàm
Raw XML: 39399444
Parsed XML: {"retrievecustomer":{"id":["39399444"]}}
5 được gọi.

Cuối cùng, chuỗi HTML được mã hóa và gửi lại cho máy khách trên dòng 32.

Hãy để viết một số JavaScript phía máy khách để kiểm tra tuyến đường:

// app.js
var express = require('express');
var xmlparser = require('express-xml-bodyparser');

var app = express();
app.use(xmlparser());
// other Express middleware and configurations
4

Trên dòng 22, đoạn HTML được mã hóa bằng hàm

// app.js
app.use(xmlparser({
  normalizeTags: false
}));
2 tích hợp của trình duyệt, tương tự như cách chúng tôi giải mã nó ở phía máy chủ trong ví dụ trước.


Nhiều bài viết tuyệt vời hơn từ Logrocket:

  • Đừng bỏ lỡ một khoảnh khắc với bản phát lại, một bản tin được quản lý từ Logrocket
  • Tìm hiểu cách Galileo của Logrocket cắt giảm tiếng ồn để chủ động giải quyết các vấn đề trong ứng dụng của bạn
  • Sử dụng React's UsEffect để tối ưu hóa hiệu suất của ứng dụng của bạn
  • Chuyển đổi giữa nhiều phiên bản của nút
  • Khám phá cách làm động ứng dụng ứng dụng React của bạn với Animxyz
  • Khám phá Tauri, một khuôn khổ mới để xây dựng các nhị phân
  • So sánh NestJS so với Express.js

Bạn sẽ nhận thấy một vài sự khác biệt giữa đoạn HTML ban đầu đang được gửi (dòng 3 Ném16) và đoạn HTML đã được sửa đổi được trả về (được trình bày trong các nhận xét trên các dòng 32 Nott46):

  • Một số thẻ bổ sung như
    // app.js
    app.use(xmlparser({
      normalizeTags: false
    }));
    
    3 đã được thêm vào HTML đã được trả về. Các thẻ này được tự động thêm vào chức năng Cheerio
    Raw XML: 39399444
    Parsed XML: {"retrievecustomer":{"id":["39399444"]}}
    
    5. Cheerio rất tha thứ khi tải HTML: Nó sẽ thêm các thẻ bổ sung để đảm bảo HTML là tài liệu HTML theo tiêu chuẩn khiếu nại
  • Các thuộc tính
    Raw XML: 39399444
    Parsed XML: {"retrievecustomer":{"id":["39399444"]}}
    
    7 đã được thêm vào mỗi thẻ
    // app.js
    app.use(xmlparser({
      normalizeTags: false
    }));
    
    6 như mong đợi

Tạo hình ảnh SVG

Ví dụ này là một chút trực quan và thú vị so với những người khác. Hãy để điều khiển một số hình ảnh SVG bằng cách sửa đổi mã nguồn XML của họ.

Đầu tiên, một đoạn mồi nhanh trên đồ họa vector có thể mở rộng (SVG). SVG là định dạng hình ảnh dựa trên XML được hỗ trợ bởi tất cả các trình duyệt chính. SVG XML bao gồm một loạt các yếu tố xác định các loại hình dạng khác nhau. Phong cách CSS có thể được bao gồm trong mỗi hình dạng để xác định ngoại hình của nó. Thông thường, bạn sẽ sử dụng một công cụ để tạo SVG XML thay vì mã tay, nhưng cho rằng hình ảnh SVG chỉ là XML, thao tác hình ảnh qua JavaScript là có thể.

Chúng tôi sẽ tạo một tuyến đường chấp nhận ba màu, tải hình ảnh SVG từ hệ thống tệp máy chủ, áp dụng màu sắc cho các hình dạng nhất định trong hình ảnh và trả lại cho máy khách để được hiển thị. Chúng tôi sẽ sử dụng gói SVGSON để chuyển đổi giữa SVG XML và JSON để đơn giản hóa mã mà chúng tôi cần viết để thao tác với hình ảnh.

Bắt đầu bằng cách cài đặt gói SVGSON:

// app.js
var express = require('express');
var xmlparser = require('express-xml-bodyparser');

var app = express();
app.use(xmlparser());
// other Express middleware and configurations
5

Tạo tuyến đường

// app.js
app.use(xmlparser({
  normalizeTags: false
}));
7 mới:

// app.js
var express = require('express');
var xmlparser = require('express-xml-bodyparser');

var app = express();
app.use(xmlparser());
// other Express middleware and configurations
6

Có khá nhiều điều đang diễn ra trong mã này. Hãy cùng phá vỡ nó một chút và làm nổi bật một vài khái niệm chính.

Trên các dòng 5 trận8, các mô -đun

// app.js
app.use(xmlparser({
  normalizeTags: false
}));
8 và
// app.js
app.use(xmlparser({
  normalizeTags: false
}));
9 được nhập từ gói SVGSON. Các tên mô -đun này khá chung chung, nhưng chúng ta có thể sử dụng phá hủy đối tượng để cung cấp cho chúng nhiều tên cô đọng hơn như
Raw XML: 39399444
Parsed XML: {"retrieveCustomer":{"id":["39399444"]}}
0 và
Raw XML: 39399444
Parsed XML: {"retrieveCustomer":{"id":["39399444"]}}
1.

Trên dòng 17, hàm

Raw XML: 39399444
Parsed XML: {"retrieveCustomer":{"id":["39399444"]}}
2 được sử dụng để tải nội dung của hình ảnh SVG được xác định trước từ hệ thống tệp máy chủ bằng cách sử dụng các mô -đun Node.js gốc. Hình ảnh đang được sử dụng là
Raw XML: 39399444
Parsed XML: {"retrieveCustomer":{"id":["39399444"]}}
3. Đây là những gì nó có vẻ như bắt đầu với:

Hướng dẫn write xml file nodejs - ghi tệp xml nodejs
Hình ảnh sơn gốc.SVG.

Các dòng 20 trận36 là nơi xảy ra phép thuật thao tác hình ảnh. XML SVG được chuyển đổi thành đối tượng JSON. JavaScript tiêu chuẩn được sử dụng để điều hướng cây đối tượng để xác định vị trí ba hình dạng đường dẫn mà chúng tôi muốn thao tác. Dưới đây là so sánh của cây đối tượng JSON (phía bên trái) với SVG XML (phía bên phải) để giúp hình dung nó. Lưu ý rằng một số yếu tố đã được loại bỏ cho sự ngắn gọn.

Hướng dẫn write xml file nodejs - ghi tệp xml nodejs
Cây đối tượng SVG JSON so với SVG XML.

Hàm trợ giúp

Raw XML: 39399444
Parsed XML: {"retrieveCustomer":{"id":["39399444"]}}
4 được gọi trên các dòng 27 Ném29 định vị hình dạng đường dẫn bằng ID của nó và thay thế kiểu điền của nó bằng kiểu điền mới được xây dựng bằng cách sử dụng các màu được cung cấp trong yêu cầu.

Đối tượng SVG JSON được chuyển đổi trở lại chuỗi SVG XML trên dòng 32 và được trả lại cho máy khách trên dòng 35.

Hãy để viết một số JavaScript phía máy khách để kiểm tra tuyến đường:

// app.js
var express = require('express');
var xmlparser = require('express-xml-bodyparser');

var app = express();
app.use(xmlparser());
// other Express middleware and configurations
7

Nếu chúng ta hiển thị SVG XML này, đây là những gì nó sẽ trông như thế nào:

Hướng dẫn write xml file nodejs - ghi tệp xml nodejs
Cập nhật hình ảnh sơn.SVG.

Gói lên: Bạn đã có đủ XML chưa?

Chúng tôi đã đề cập đến một vài cách sử dụng phổ biến của XML, từ các trao đổi dữ liệu dựa trên XML cũ nhàm chán đến thao tác hình ảnh SVG. Dưới đây là một bản tóm tắt các gói NPM mà chúng tôi đã xem xét và các tính năng chính phân biệt chúng.

Gói NPMCác tính năng chính
XML2JS
  • Có thể thực hiện chuyển đổi hai chiều giữa XML và JavaScript
  • Phơi bày một số tùy chọn có thể được sử dụng để thay đổi cách phân tích cú pháp XML
  • Ghép nối tốt với Express bằng cách sử dụng phần mềm trung gian Express-xml-Bodyparser
libxmljs2
  • Có thể phân tích và xác nhận XML chống lại các lược đồ XML
Cheerio
  • Chuyên phân tích cú pháp và thao tác với HTML
  • Có thể được sử dụng để tải tài liệu HTML hoặc XML
  • Tha thứ theo thiết kế; Sẽ thêm các thẻ HTML bị thiếu để đảm bảo HTML hợp lệ
SVGSON
  • Có thể thực hiện chuyển đổi hai chiều giữa hình ảnh SVG (XML) và JSON
  • Giúp dễ dàng điều khiển hình ảnh SVG với JavaScript

200 Chỉ có giám sát không thành công và các yêu cầu mạng chậm trong sản xuất Monitor failed and slow network requests in production

Triển khai một ứng dụng hoặc trang web dựa trên nút là phần dễ dàng. Đảm bảo phiên bản nút của bạn tiếp tục phục vụ tài nguyên cho ứng dụng của bạn là nơi mọi thứ trở nên khó khăn hơn. Nếu bạn quan tâm đến việc đảm bảo các yêu cầu cho các dịch vụ phụ trợ hoặc bên thứ ba thành công, hãy thử Logrocket. https://logrocket.com/signup/

Hướng dẫn write xml file nodejs - ghi tệp xml nodejs
https://logrocket.com/signup/

Logrocket giống như một DVR cho các ứng dụng web và di động, ghi lại mọi thứ xảy ra trong khi người dùng tương tác với ứng dụng của bạn. Thay vì đoán tại sao các vấn đề xảy ra, bạn có thể tổng hợp và báo cáo về các yêu cầu mạng có vấn đề để nhanh chóng hiểu được nguyên nhân gốc.

Logrocket công cụ ứng dụng của bạn để ghi lại thời gian hiệu suất cơ bản như thời gian tải trang, thời gian đến byte đầu tiên, yêu cầu mạng chậm và cũng ghi lại các hành động/trạng thái Redux, Ngrx và Vuex. Bắt đầu giám sát miễn phí.