如何在不定义路由的情况下使用Node js Express创建独立的可执行js文件?

时间:2016-01-20 18:16:44

标签: node.js express

我遇到了Node JS的问题。

使用Apache / php模型,我能够创建一个独立的 save.php 文件(接受发布请求,保存到txt文件),而无需使用Apache服务器

<?php file_put_contents ( 'content.txt' , $_POST['myData']);?>

在Node中,我已经 server.js 开始提供我/ public中的任何文件:

var express = require('express');
var app = express();
app.use(express.static('public'));
app.use(express.static(__dirname + '/public'));

app.use(function(req,res, next){
    if(req.accepts('html')){
    res.status(404).sendFile(__dirname+'/public/404.html');
    }
});

app.listen(process.env.PORT || 80);

如何制作 save.js 文件,例如/public/test_project1/save.js,可以在HTML表单提交上执行吗?

var fs = require('fs');
fs.writeFile("content.txt", ???post data???)

每次在/ public中制作新的js文件时,有没有办法避免在 server.js 中明确定义app.post()...我正在寻找一种架构,允许我创建一个节点服务器来托管/ public中的各种单独的项目文件

2 个答案:

答案 0 :(得分:0)

首先,您需要为帖子请求创建一个端点,然后解析表单数据,一个选项可能是body-parser中间件,最后保存内容。

类似的东西:

var express = require('express');
var app = express();
var bodyparser = require("body-parser");

app.use(bodyparser.urlenconded({extended:true}); // middleware for parse form data
app.use(express.static('public'));
app.use(express.static(__dirname + '/public'));
app.post("/endpoint",function(req,res){
 //myData is input name
 var content = req.body.myData;
 fs.writeFile("content.txt", content,function(err){
  res.end("done");
 })
})

app.use(function(req,res, next){
    if(req.accepts('html')){
    res.status(404).sendFile(__dirname+'/public/404.html');
    }
});

app.listen(process.env.PORT || 80);

然后使用myData作为输入向/ endpoint发出POST请求。

答案 1 :(得分:0)

以下是我的想法 - 修改 server.js 以处理该文件夹中的所有POST请求。这有危险吗?

app.post('/:folder/:file',function(req, res){
    filepath=__dirname+'/public/'+req.params.folder+'/'+req.params.file;
    fs.stat(filepath, function(err, stat) {
        if(err == null) {
            console.log('File exists');
            var anyFile=require(filepath)(req.body);
            res.redirect(anyFile);
        } else if(err.code == 'ENOENT') {
            res.send('File does not exist.');
        } else {
            res.send('Error: '+ err.code);          
        }
    });
});