2015-02-08 38 views
0

我有一个文本区域,用户在文本中输入内容。一旦他们点击保存,文本区域中的内容就会发送到服务器端。在服务器端,我想使用内容来创建一个文件。我有一个名为“usercode”的变量,它保存文本区域的内容。我创建一个文件,如何使用nodejs中的用户输入创建文件?

fs.wirteFile(name + "java", usercode, function(){}) 

命名文件名,由用户给出。这确实创建了一个文件,但文件中唯一的东西是“[object Object]”。

这里是我使用的玉我的客户端:

extends layout 

block content 
div(id="ineditortxt") 
    h1(name="headings") #{title} 
    a(href='/signout', class='text-center new-account') Sign Out 
    div(id="editor") 
     |public class #{title}{ 
     | public static void main(String[] args) { 
     | 
     | } 
     |} 
    script(src="src/ace.js", type="text/javascript") 
    script(type="text/javascript"). 
     //var myRequest = new XMLHttpRequest(); 
     var editor=ace.edit("editor"); 
     editor.setTheme("ace/theme/monokai"); 
     editor.getSession().setMode("ace/mode/java"); 
     $(document).ready(function(){ 
      $("#save").click(function(event){ 
       var content = editor.getValue(); 
       $.ajax({ 
        url:'/getcode', 
        type:'POST', 
        data: content, 
        jsonpCallback: 'callback' 
       }); 
       event.preventDefault(); 
       return false; 
       }); 
      }); 
    form(name="Save", id = "save") 
     input(type="submit", value="Save") 
    div(id="result") 
     | 

这里是服务器端的我并没有包括所有的代码,只是一个与此相关的问题:

var express = require('express'); 
var router = express(); 
var passport = require('passport'); 
var LocalStrategy = require('passport-local').Strategy; 
var param = require('express-params'); 
var Parse = require('parse').Parse; 
var http = require('http'); 
var fs = require('fs'); 
    router.post('/editor', function(req, res){ 
    name = req.body.newname; 
    res.render('Editor', {title: "" + name}); 
}); 

router.post('/getcode', function(req, res){ 
    var usercode = req.body; 
    fs.writeFile(name + ".java", usercode, function(err){ 
    if(err){ 
     console.log(err); 
    } else{ 
     console.log("The file is saved!"); 
    } 
    }) 
    res.send({code: "" + usercode}); 
    console.log(usercode); 
}); 

return router; 
} 
+0

使用JSON.stringify(用户代码)? – JuniorCompressor 2015-02-08 15:26:22

+0

这是有效的,除非用户输入:'System.out.println(“Hello World”);'然后文件保存为:'{“System.out.println(\”Hello World \“);”: “”}'。 – Suji 2015-02-08 15:36:46

回答

0

在客户端进行反向转义其固定字符串第一个字符串化JSON对象的代码应该是:

$(document).ready(function(){ 
      $("#save").click(function(event){ 
       var content = editor.getValue(); 
       console.log("This is content: " + content); 
       $.ajax({ 
        url:'/getcode', 
        type:'POST', 
        data: {'code': content}, 
        processData: 'false', 
       }); 
       event.preventDefault(); 
       return false; 
       }); 
      }); 

在服务器端的代码应该是:

router.post('/getcode', function(req, res){ 
    var usercode = req.body.code; 
    newname = name+".java"; 
0

您实际上正在将req.body对象写入该文件,该文件是用于访问请求中的发布数据的JSON对象。

您需要通过表单字段名称访问该对象内的post数据,所以如果你有一个名为“MyField的”表单域,它的数据将在req.body.myField

可如果你想只写整个对象该文件,则需要使用JSON.stringify(req.body)

JSON.stringify是要逃,你可以通过使用unescape(string)

+0

这是有效的,除非用户输入:'System.out.println(“Hello World”);'然后文件保存为:'{“System.out.println(\”Hello World \“);”: “”}' – Suji 2015-02-08 15:44:32

+0

@Sujinthan通过回答更新。 – 2015-02-08 15:48:11

+0

不工作:这是我的代码'fs.writeFile(name +“.java”,unescape(JSON.stringify(req.body)),function(err){' – Suji 2015-02-08 21:32:20

相关问题