2016-09-16 53 views
0

我在Server1上有一个名为Sitemap.xml的文件,我想从另一台服务器Server2写入此文件。在另一台服务器的文件上写入

Server1

Server1上的文件结构:

  • 应用
  • 意见
  • 公共
  • sitemap.xml的
  • app.js

Sitemap可以通过Server1/sitemap因为我已经在我的快递文件

app.use('/sitemap', express.static(__dirname + '/sitemap.xml')); 
+0

你能想象如果你能做到这一点吗?这意味着任何人都可以远程修改你的文件! 你需要做的是在服务器1上创建一个API,如/ changeSitemap并让server2调用它 – VirginieLGB

+0

实际上,我不想公开我的后端API,因为我试图从服务器1上的Server2修改文件。 – user3811978

+0

那会更糟,如果你能这样做的话haha 而且你可以随时检查是否来自Server2的呼叫! – VirginieLGB

回答

0

你应该保护航线与秘密令牌,以避免暴露在下面使用代码访问。希望这会对你有所帮助:

// Server 1 
const fs = require('fs'); 

app.use(function(req, res, next) { 
    var secret = req.headers.hasOwnProperty('authorization') 
    ? req.headers.authorization 
    : false; 

    if (! secret || secret !== 'token [your-secret-token]') { 
    res.status(403).send('Access forbidden'); 
    } 

    // Create write stream to sitemap file 
    var stream = fs.createWriteStream('sitemap.xml'); 

    // Redirect request body to stream which writes to sitemap file 
    req.pipe(stream) 
    .on('end',() => res.send('ok')); 
}); 


// Server 2 

const http = require('http'); 
const fs = require('fs'); 

var stream = fs.createReadStream('new-sitemap.xml'); 

var req = http.request({ 
    host: 'server1', 
    headers: { 
    authorization: 'token [your-secret-token]', 
    }, 
}); 

req.on('response', (res) => { 
    if (res.status === 200) { 
    console.log('File uploaded'); 
    } 
    else { 
    console.error('File not loaded'); 
    } 
}); 

// Write data from file into request body 
stream.pipe(req); 

请注意,令牌应该是最小的32个字符长度足够强大。不要忘记不时更新它。这也是一个概念。

相关问题