如何使用node.js和express在文件中写入结果

How to write result in a file by using node.js and express?

本文关键字:文件 结果 express 何使用 node js      更新时间:2023-09-26

我在elasticsearch之上使用node.js和express.js构建了一个应用程序。这是一个非常简单的带有搜索框的应用程序。当您搜索查询时,它会以JSON格式打印结果。例如,如果我搜索关键字"white",输出如下所示:https://i.stack.imgur.com/VHuWl.png

现在我想把这个结果存储在一个文件中(例如output.json)

var fs = require('fs');
var path = "output.json";
var express = require('express'); //To make use of Express' routing capabilities you need to initiate a new Express Router.
var router = express.Router(); //To make use of Express' routing capabilities you need to initiate a new Express Router. get, put, post, delete, all
var searchModule = require('../search_module/search.js');

//There are two ways of using the router methods. You can define one route (for example /home) and attach the methods to it, or you can create a new method for each route.
/* GET home page. */
router.get('/', function(req, res) { //.get() - when you visit a website you make a GET request. You can get data from a URL in a GET request too.
  res.render('index', { title: 'Express' });
});
router.post('/search-results', function(req, res) {//.post() is a method used everywhere for posting data to a server / app. You'll want to use this for submitting forms.
  searchModule.search(req.body, function(data) {
    res.render('index', { title: 'Express', results: data });
  });
});

fs.writeFile(path,data,function(err){
     if(err) console.error(err);
})
module.exports = router;

当我尝试使用node.js的writeFile方法时,我得到了一个Reference错误,显示没有定义"data"。我的错误如下:https://i.stack.imgur.com/lwXfW.png

我搞不清楚这个错误。有没有其他方法可以通过使用node.js和express将输出写入文件?

编辑:我编辑了我的javascript

var fs = require('fs');
var path = "output.json";
var express = require('express'); //To make use of Express' routing capabilities you need to initiate a new Express Router.
var router = express.Router(); //To make use of Express' routing capabilities you need to initiate a new Express Router. get, put, post, delete, all
var searchModule = require('../search_module/search.js');

//There are two ways of using the router methods. You can define one route (for example /home) and attach the methods to it, or you can create a new method for each route.
/* GET home page. */
router.get('/', function(req, res) { //.get() - when you visit a website you make a GET request. You can get data from a URL in a GET request too.
  res.render('index', { title: 'Express' });
});
router.post('/search-results', function(req, res) {//.post() is a method used everywhere for posting data to a server / app. You'll want to use this for submitting forms.
  searchModule.search(req.body, function(data) {
    fs.writeFile(path,data,function(err){
       if(err) console.error(err);
    })
    res.render('index', { title: 'Express', results: data });
  });
});
module.exports = router;

但当我运行这个javascript时,我得到了以下输出:https://i.stack.imgur.com/rfBq0.png

我没有得到JSON输出。我的输出应该是这样的:https://i.stack.imgur.com/VHuWl.png

我还在前端使用一个带有javascript的ejs文件(index.ejs),它看起来像这样:

<!DOCTYPE html>
<html>
  <head>
    <title><%= title %></title>
  </head>
  <body>
    <h1><%= title %></h1>
    <form action='/search-results' method='post'>
      <input type="text" name="searchTerm" placeholder="your search term here">
      <button type="submit"> SEARCH </button>
    </form>
    <ul>
      <% if(locals.results) { %>
      <pre>
           <%= JSON.stringify(results,null,2) %>
        </pre>
        <% results.forEach( function( result ) }) %>
      <% } %>
    </ul>
  </body>
</html>

我需要从这个文件中获取输出吗?

此时未定义data变量。您可以在searchModule.search调用中移动fs.writeFile函数,如下所示:

searchModule.search(req.body, function(data) {
    fs.writeFile(path,data,function(err){
       if(err) console.error(err);
    })
    res.render('index', { title: 'Express', results: data });
});

或者在之前声明您的变量,并在searchModule.search调用中设置它,以便在写入文件的范围内之后进行处理:

var fileData;
searchModule.search(req.body, function(data) {
    fileData = data;
    res.render('index', { title: 'Express', results: data });
});
fs.writeFile(path,fileData,function(err){
   if(err) console.error(err);
})

我正在查看这个块:

fs.writeFile(path,data,function(err){
     if(err) console.error(err);
})

您已经在代码的顶部声明了path,但在此上下文中data似乎是未定义的。