{"id":4299,"date":"2017-10-02T00:24:21","date_gmt":"2017-10-01T15:24:21","guid":{"rendered":"https:\/\/kumapress.com\/wp\/?p=4299"},"modified":"2017-10-02T00:24:21","modified_gmt":"2017-10-01T15:24:21","slug":"wysiwyg%e3%82%a8%e3%83%87%e3%82%a3%e3%82%bf%e3%81%aesummernote-node-js-%e3%81%a7%e5%ae%9f%e8%a3%85%e3%81%97%e3%81%a6%e3%81%bf%e3%81%9f","status":"publish","type":"post","link":"https:\/\/kumapress.com\/?p=4299","title":{"rendered":"WYSIWYG\u30a8\u30c7\u30a3\u30bf\u306esummernote + node.js \u3067\u5b9f\u88c5\u3057\u3066\u307f\u305f"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-4300\" src=\"https:\/\/kumapress.com\/wp\/wp-content\/uploads\/2017\/10\/dc8b75773575d0d87d0551a8e244f317.png\" alt=\"\" width=\"567\" height=\"244\" srcset=\"https:\/\/kumapress.com\/wp\/wp-content\/uploads\/2017\/10\/dc8b75773575d0d87d0551a8e244f317.png 567w, https:\/\/kumapress.com\/wp\/wp-content\/uploads\/2017\/10\/dc8b75773575d0d87d0551a8e244f317-300x129.png 300w\" sizes=\"auto, (max-width: 567px) 100vw, 567px\" \/><\/p>\n<p>WYSIWYG\u30a8\u30c7\u30a3\u30bf\u306e\u4ee3\u8868\u683c(\uff1f)\u306eCKEditor\u304c\u5546\u7528\u5229\u7528\u304c\u6709\u6599\u3068\u306a\u306e\u3067\u3001\u30bd\u30ec\u4ee5\u5916\u306e\u30a8\u30c7\u30a3\u30bf\u30fc\u3092\u63a2\u3057\u3066\u3044\u307e\u3057\u305f\u3002<\/p>\n<p>Bootstrap\u3092\u4f7f\u3063\u3066\u3044\u308b\u306e\u3067\u3001<a href=\"http:\/\/jhollingworth.github.io\/bootstrap-wysihtml5\/\" target=\"_blank\" rel=\"noopener\">\u300cbootstrap-wysihtml5\u300d<\/a>\u3063\u3066\u3082\u8003\u3048\u305f\u3093\u3067\u3059\u304c\u3001\u753b\u50cf\u306e\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u304c\u3081\u3093\u3069\u3044\u306a\u3041\u3002\u3002\u3002<\/p>\n<p>\u3063\u3066\u3053\u3068\u3067\u3001\u4eca\u56de\u306f<a href=\"https:\/\/summernote.org\/\" target=\"_blank\" rel=\"noopener\">\u300csummernote\u300d<\/a>\u3092\u5229\u7528\u3059\u308b\u3053\u3068\u3068\u3057\u307e\u3057\u305f\u3002<\/p>\n<h2>view\u5074\u306e\u5b9f\u88c5<\/h2>\n<h3>\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb<\/h3>\n<p>\u30d0\u30c3\u30b5\u30ea\u3068\u629c\u7c8b\u3057\u3066\u3044\u307e\u3059(^^)<\/p>\n<p><code>&lt;html&gt;<\/code><br \/>\n<code>\u00a0\u3000\u3000\u3000&lt;head&gt;<\/code><br \/>\n<code>\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000&lt;link rel=\"stylesheet\" href=\"https:\/\/maxcdn.bootstrapcdn.com\/bootstrap\/4.0.0-beta\/css\/bootstrap.min.css\"&gt;<\/code><br \/>\n<code>\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000&lt;link href=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/summernote\/0.8.8\/summernote.css\" rel=\"stylesheet\"&gt;<\/code><br \/>\n<code>\u00a0\u3000\u3000\u3000\u3000&lt;\/head&gt;<\/code><br \/>\n<code>\u00a0\u3000\u3000\u3000&lt;body&gt;<\/code><br \/>\n<code>\u00a0\u3000\u3000\u3000\u3000\u3000\u3000\u3000&lt;script src=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/jquery\/3.2.1\/jquery.js\"&gt;&lt;\/script&gt;<\/code><br \/>\n<code>\u00a0\u3000\u3000\u3000\u3000\u3000\u3000\u3000&lt;script src=\"https:\/\/maxcdn.bootstrapcdn.com\/bootstrap\/4.0.0-beta\/js\/bootstrap.min.js\"&gt;&lt;\/script&gt;<\/code><br \/>\n<code>\u00a0\u3000\u3000\u3000\u3000\u3000\u3000\u3000&lt;script src=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/summernote\/0.8.8\/summernote.js\"&gt;&lt;\/script&gt;<\/code><br \/>\n<code>\u00a0\u3000\u3000\u3000\u3000\u3000\u3000\u3000&lt;script src=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/summernote\/0.8.8\/lang\/summernote-ja-JP.js\"&gt;&lt;\/script&gt;<\/code><br \/>\n<code>\u00a0\u3000\u3000\u3000&lt;\/body&gt;<\/code><br \/>\n<code>&lt;\/html&gt;<\/code><\/p>\n<h3>HTML<\/h3>\n<p><code> <\/code><code>&lt;div class=\"form-group form-inline\"&gt;<\/code><br \/>\n<code>\u00a0\u3000\u3000\u3000&lt;label&gt;\u5185\u3000\u3000\u5bb9\u3000\uff1a&lt;\/label&gt;<\/code><br \/>\n<code>\u3000\u3000\u3000\u3000&lt;textarea class=\"form-control\" id=\"summernote\" name=\"comment\"&gt;&lt;\/textarea&gt;<\/code><br \/>\n<code>\u3000\u3000&lt;\/div&gt;&lt;!-- end \u5185\u5bb9 --&gt;<\/code><\/p>\n<p>\u3053\u308c\u3067summernote\u306e\u30ef\u30af\u304c\u8868\u793a\u3055\u308c\u307e\u3059\u3002<\/p>\n<h3>\u30b9\u30af\u30ea\u30d7\u30c8<\/h3>\n<p><code>&lt;script type=\"text\/javascript\"&gt;<\/code><br \/>\n<code>\u00a0\u3000$(function() {<\/code><br \/>\n<code>\u3000\u3000\u3000\u3000\u3000\u3000$('#summernote').summernote({<\/code><br \/>\n<code>\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000tabsize: 2,<\/code><br \/>\n<code>\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000height: 300,<\/code><br \/>\n<code>\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000fontNames: [\"YuGothic\",\"Yu Gothic\",\"Hiragino Kaku Gothic Pro\",\"Meiryo\",\"sans-serif\", \"Arial\",\"Arial Black\",\"Comic Sans MS\",\"Courier New\",\"Helvetica Neue\",\"Helvetica\",\"Impact\",\"Lucida Grande\",\"Tahoma\",\"Times New Roman\",\"Verdana\"],<\/code><br \/>\n<code>\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000lang: \"ja-JP\",<\/code><br \/>\n<code>\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000callbacks : {<\/code><br \/>\n<code>\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000onImageUpload: function( files, editor, welEditable ) {<\/code><br \/>\n<code>\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000sendFile( files[0], editor, welEditable );<\/code><br \/>\n<code>\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000}<\/code><br \/>\n<code>\u3000\u3000\u3000\u3000\u3000\u3000}<\/code><br \/>\n<code>\u3000\u3000\u3000});<\/code><br \/>\n<code>\u3000\u3000\u3000function sendFile( file, editor, welEditable ) {<br \/>\nvar form_data = new FormData();<br \/>\nform_data.append( \"datafile\", file );<br \/>\n$.ajax({<br \/>\nurl : \"\/nj\/upload\",<br \/>\ntype : \"POST\",<br \/>\ndata : form_data,<br \/>\ncache : false,<br \/>\ncontentType : false,<br \/>\nprocessData : false,<br \/>\nsuccess : function( url ) {<br \/>\n\/\/ editor.insertImage( welEditable, url );<br \/>\n$('#summernote').summernote( 'editor.insertImage', url );<br \/>\n}<br \/>\n})<br \/>\n.done( function( data, textstatus, jqXHR ) {<br \/>\n})<br \/>\n.fail( function( data, textstatus, errorThrown ) {<br \/>\nalert( \"fail:\" + textstatus );<br \/>\n});<br \/>\n}<br \/>\n<\/code><code>&lt;\/script&gt;<\/code><\/p>\n<p>height\u3092\u6307\u6458\u3057\u3066\u304a\u304b\u306a\u3044\u3068\u3001\u9ad8\u3055\u304c\u306a\u304f\u306a\u3063\u3061\u3083\u3044\u307e\u3059(^^;<\/p>\n<p>callbacks\u3067\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u51e6\u7406\u3092\u30b3\u30fc\u30eb\u3057\u307e\u3059\u3002<\/p>\n<p>\u305d\u306e\u4ed6\u306e<a href=\"https:\/\/summernote.org\/deep-dive\/#callbacks\" target=\"_blank\" rel=\"noopener\">\u300ccallbacks\u300d<\/a>\u306f\u3053\u3061\u3089\u3092\u3054\u89a7\u304f\u3060\u3055\u3044\u3002<\/p>\n<h2>Node.js\u5074\u306e\u5b9f\u88c5<\/h2>\n<p>multer\u4f7f\u3044\u307e\u3059\u3002<\/p>\n<p>\u753b\u50cf\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u3059\u308b\u5bb9\u91cf\u3092\u5897\u3084\u3057\u307e\u3059\u3002<\/p>\n<p>\u30c7\u30d5\u30a9\u30eb\u30c8\u306f100kB\u3057\u304b\u7121\u3044\u3082\u3093\u3067\u3002\u3002\u3002\u3067\u306a\u3044\u3068\u300c413 Request Entity Too Large\u300d\u3067\u307e\u3059w<\/p>\n<p>app.js<\/p>\n<p><code>\/\/ \u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u3059\u308b\u30d5\u30a1\u30a4\u30eb\u30b5\u30a4\u30ba\u3092\u5897\u3084\u3059\uff1adefault 100kb<\/code><br \/>\n<code> \/\/app.use(bodyParser.urlencoded({ extended: false }));<\/code><br \/>\n<code> app.use(bodyParser.urlencoded({ limit: '50mb', extended: false }));<\/code><\/p>\n<p><code>routes\u306e\u5b9f\u88c5<\/code><\/p>\n<p><code>var express = require('express');<\/code><br \/>\n<code> var config = require('config');<\/code><br \/>\n<code> var fs = require('fs');<\/code><\/p>\n<p><code>var logger = require('..\/modules\/logger');<\/code><br \/>\n<code> var router = express.Router();<\/code><br \/>\n<code> var multer = require( 'multer' );<\/code><\/p>\n<p><code>let storage = multer.diskStorage({<\/code><br \/>\n<code>\u3000\u3000\u3000\u3000destination : function( req, file, call_bk ) {<\/code><br \/>\n<code>\u3000\u3000\u3000\u3000call_bk( null, config.conf.upload_dir );<\/code><br \/>\n<code> },<\/code><br \/>\n<code> filename : function( req, file, call_bk ) {<\/code><br \/>\n<code>\u3000\u3000\u3000\u3000call_bk( null, file.originalname );<\/code><br \/>\n<code> }<\/code><br \/>\n<code> });<\/code><br \/>\n<code> let memStorage = multer.memoryStorage({<\/code><br \/>\n<code>\u3000\u3000\u3000\u3000filename : function( req, file, call_bk ) {<\/code><br \/>\n<code>\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000call_bk( null, file.originalname );<\/code><br \/>\n<code>\u3000\u3000\u3000\u3000}<\/code><br \/>\n<code> });<\/code><\/p>\n<p><code>let fileName = \"\"<\/code><br \/>\n<code> let upload;<\/code><\/p>\n<p><code>router.get('\/', function(req, res, next) {<\/code><br \/>\n<code>\u3000\u3000\u3000\u3000res.render( 'upload_test', { title : 'Express' });<\/code><br \/>\n<code> });<\/code><\/p>\n<p><code>router.post('\/upload', function( req,res ) {<\/code><br \/>\n<code>\u3000\u3000\u3000\u3000\/\/ res.setHeader( 'Content-Type', 'text\/plain' );<\/code><br \/>\n<code>\u3000\u3000\u3000\u3000upload = multer({ storage: storage }).single('datafile');<\/code><br \/>\n<code>\u3000\u3000\u3000\u3000upload( req, res, function( err ) {<\/code><br \/>\n<code>\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000if( err ) {<\/code><br \/>\n<code>\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\/\/ res.send( \"Failed to write \" + req.file.destination + \" with \" + err );<\/code><br \/>\n<code>\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000res.send( \"Failed to write \" + \" with \" + err );<\/code><br \/>\n<code>\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000} else {<\/code><br \/>\n<code>\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000logger.system.debug( '\/api\/upload:req:originalname:' + req.file.originalname );<\/code><br \/>\n<code>\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000res.send( config.conf.viewer_dir + '\/' + req.file.originalname );<\/code><br \/>\n<code>\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000}<\/code><br \/>\n<code>\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000res.end();<\/code><br \/>\n<code>\u3000\u3000\u3000\u3000});<\/code><br \/>\n<code> });<\/code><br \/>\n<code> module.exports = router;<\/code><\/p>\n<p>&nbsp;<\/p>\n<aside class=\"row veu_insertAds after\"><div class=\"col-md-6\"><script async src=\"https:\/\/pagead2.googlesyndication.com\/pagead\/js\/adsbygoogle.js\"><\/script>\r\n<!-- \u7b2c 1 \u9762 - 2\uff08www.kumapress.com\uff09 -->\r\n<ins class=\"adsbygoogle\"\r\n     style=\"display:block\"\r\n     data-ad-client=\"ca-pub-5987681888830890\"\r\n     data-ad-slot=\"5379270693\"\r\n     data-ad-format=\"auto\"\r\n     data-full-width-responsive=\"true\"><\/ins>\r\n<script>\r\n     (adsbygoogle = window.adsbygoogle || []).push({});\r\n<\/script><\/div><div class=\"col-md-6\"><script async src=\"https:\/\/pagead2.googlesyndication.com\/pagead\/js\/adsbygoogle.js\"><\/script>\r\n<!-- \u7b2c 1 \u9762 - 1\uff08www.kumapress.com\uff09 -->\r\n<ins class=\"adsbygoogle\"\r\n     style=\"display:block\"\r\n     data-ad-client=\"ca-pub-5987681888830890\"\r\n     data-ad-slot=\"7353370294\"\r\n     data-ad-format=\"auto\"\r\n     data-full-width-responsive=\"true\"><\/ins>\r\n<script>\r\n     (adsbygoogle = window.adsbygoogle || []).push({});\r\n<\/script><\/div><\/aside>","protected":false},"excerpt":{"rendered":"<p>WYSIWYG\u30a8\u30c7\u30a3\u30bf\u306e\u4ee3\u8868\u683c(\uff1f)\u306eCKEditor\u304c\u5546\u7528\u5229\u7528\u304c\u6709\u6599\u3068\u306a\u306e\u3067\u3001\u30bd\u30ec\u4ee5\u5916\u306e\u30a8\u30c7\u30a3\u30bf\u30fc\u3092\u63a2\u3057\u3066\u3044\u307e\u3057\u305f\u3002 Bootstrap\u3092\u4f7f\u3063\u3066\u3044\u308b\u306e\u3067\u3001\u300cbootstrap-wysihtml5\u300d\u3063\u3066\u3082\u8003\u3048\u305f\u3093\u3067\u3059\u304c\u3001 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"vkexunit_cta_each_option":"","footnotes":""},"categories":[143,126],"tags":[],"class_list":["post-4299","post","type-post","status-publish","format-standard","hentry","category-node-js","category-blog-memo"],"_links":{"self":[{"href":"https:\/\/kumapress.com\/index.php?rest_route=\/wp\/v2\/posts\/4299","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kumapress.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kumapress.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kumapress.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/kumapress.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=4299"}],"version-history":[{"count":5,"href":"https:\/\/kumapress.com\/index.php?rest_route=\/wp\/v2\/posts\/4299\/revisions"}],"predecessor-version":[{"id":4305,"href":"https:\/\/kumapress.com\/index.php?rest_route=\/wp\/v2\/posts\/4299\/revisions\/4305"}],"wp:attachment":[{"href":"https:\/\/kumapress.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=4299"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/kumapress.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=4299"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kumapress.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=4299"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}