data.js 716 B

123456789101112131415161718192021222324252627282930313233343536
  1. 'use strict';
  2. const { Pattern } = require('hexo-util');
  3. const { extname } = require('path');
  4. module.exports = ctx => ({
  5. pattern: new Pattern('_data/*path'),
  6. process: function dataProcessor(file) {
  7. const Data = ctx.model('Data');
  8. const { path } = file.params;
  9. const id = path.substring(0, path.length - extname(path).length);
  10. const doc = Data.findById(id);
  11. if (file.type === 'skip' && doc) {
  12. return;
  13. }
  14. if (file.type === 'delete') {
  15. if (doc) {
  16. return doc.remove();
  17. }
  18. return;
  19. }
  20. return file.render().then(result => {
  21. if (result == null) return;
  22. return Data.save({
  23. _id: id,
  24. data: result
  25. });
  26. });
  27. }
  28. });