Node.js: как записать объект запроса в файл - PullRequest
0 голосов
/ 17 января 2019

Чтобы написать журнал (запросить информацию), я попытался использовать методы wirteFile и JSON.stringify. Но это не сработало.

Пожалуйста, помогите мне сделать эту работу

var express = require('express');
var router = express.Router();
var fs = require('fs');

router.post('/', function(req, res, next) {
 fs.writeFile('requestLog.txt', JSON.stringify(req), 'utf8', 
function(error, req){
    if(error) { console.log('error occurred') };
    res.send('success post request');
  })
});

module.exports = router;

Ответы [ 4 ]

0 голосов
/ 17 января 2019

Пожалуйста, позвольте мне поделиться с вами примером функции, которая может помочь вам создать новый новый файл и сохранить там данные:

 // Open the file for writing
  fs.open('your/path/nameOfFile.json', 'wx', (err, fileDescriptor)=>{
        //'w' - Open file for writing. The file is created (if it does not exist) 
        //or truncated (if it exists).
        //'wx' - Like 'w' but fails if the path exists.
        //'w+' - Open file for reading and writing. The file is created (if it does not exist)
        //or truncated (if it exists).
        //'wx+' - Like 'w+' but fails if the path exists.
        //open the file we want to create
        //wx:open the file for writing
        //fileDescriptor: part of callback returned, is a unique identifier
    if(!err && fileDescriptor){
      // Convert data to string
      const stringData = JSON.stringify(data)

      // Write to file and close it
      fs.writeFile(fileDescriptor, stringData,err=>{
        if(!err){
          fs.close(fileDescriptor,err=>{
            if(!err){
              callback(false)
            } else {
              callback('Error closing new file')
            }
          })
        } else {
          callback('Error writing to new file')
        }
      })
    } else {
      callback('Could not create new file, it may already exist')
    }
  })

Удачи!

0 голосов
/ 17 января 2019

В случае, если вы хотите записать все запросы в файл журнала, я бы предложил использовать morgan - npm

Морган дает много вариантов выбора, что регистрируется и в каком формате.

Вот пример:

var express = require('express')
var fs = require('fs')
var morgan = require('morgan')
var path = require('path')

var app = express()

// create a write stream (in append mode)
var accessLogStream = fs.createWriteStream(path.join(__dirname, 'access.log'), { flags: 'a' })

// setup the logger
app.use(morgan('combined', { stream: accessLogStream }))

app.get('/', function (req, res) {
  res.send('hello, world!')
})
0 голосов
/ 17 января 2019

Я бы использовал для этого специальную библиотеку журналов, есть несколько хороших. Используя библиотеку winston-express , вы можете легко регистрировать запросы в различных форматах.

например.

var express = require('express');
var expressWinston = require('express-winston');
var winston = require('winston');
var app = express();

app.use(expressWinston.logger({
    transports: [
      new winston.transports.File({ filename: 'express.log' })
    ],
    format: winston.format.combine(
      winston.format.json()
    )
  }));

app.get('/test', function(req, res, next) {
    res.send('All good');
});

app.listen(3000, function(){
  console.log(`Express Listening on port ${this.address().port}`);
});

Пример записи в журнале будет выглядеть так:


{
    "level": "info",
    "message": "HTTP GET /test",
    "meta": {
        "res": {
            "statusCode": 200
        },
        "req": {
            "url": "/test",
            "headers": {
                "host": "localhost:3000",
                "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:64.0) Gecko/20100101 Firefox/64.0",
                "accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
                "accept-language": "en-GB,en;q=0.7,en-US;q=0.3",
                "accept-encoding": "gzip, deflate",
                "connection": "keep-alive",
                "upgrade-insecure-requests": "1",
                "if-none-match": "W/\"2-nOO9QiTIwXgNtWtBJezz8kv3SLc\""
            },
            "method": "GET",
            "httpVersion": "1.1",
            "originalUrl": "/test",
            "query": {}
        },
        "responseTime": 2
    }
}
0 голосов
/ 17 января 2019

Полагаю, опечатку надо написать

fs.writeFile('requestLog.txt', JSON.stringify(req.body), 'utf8'
...