Node.js 如何在nodejs express上使用sequeilize从浏览器返回结果?

Node.js 如何在nodejs express上使用sequeilize从浏览器返回结果?,node.js,express,sequelize.js,Node.js,Express,Sequelize.js,我使用console.log检查了查询结果。所以我想在浏览器中看到这个。当我打开控制台时,控制台上出现错误urlhttp://localhost:3000/api/menu/all 通过我的浏览器 GET /api/menu/all 200 11.418 ms - - Executing (default): SELECT * FROM Menus [ [ TextRow { id: 1, parent_id: null, name: 'Admin',

我使用console.log检查了查询结果。所以我想在浏览器中看到这个。当我打开控制台时,控制台上出现错误urlhttp://localhost:3000/api/menu/all 通过我的浏览器

GET /api/menu/all 200 11.418 ms - -
Executing (default): SELECT * FROM Menus
[ [ TextRow {
      id: 1,
      parent_id: null,
      name: 'Admin',
      url: '/admin',
      order: 0,
      description: 'admin page category',
      is_admin: 'Y',
      is_active: 'Y',
      created_at: 2019-02-23T21:12:10.000Z,
      updated_at: 2019-02-23T21:12:10.000Z },
    TextRow {
      id: 2,
      parent_id: null,
      name: 'Index',
      url: '/',
      order: 0,
      description: 'publish page category',
      is_admin: 'N',
      is_active: 'Y',
      created_at: 2019-02-23T21:12:10.000Z,
      updated_at: 2019-02-23T21:12:10.000Z } ] ]
Unhandled rejection Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client
  at ServerResponse.setHeader (_http_outgoing.js:482:11)
  at ServerResponse.header (/Users/master/project/demo/server/node_modules/express/lib/response.js:767:10)
  at ServerResponse.json (/Users/master/project/demo/server/node_modules/express/lib/response.js:264:10)
  at ServerResponse.send (/Users/master/project/demo/server/node_modules/express/lib/response.js:158:21)
  at models.sequelize.query.then (/Users/master/project/demo/server/app/controllers/MenuController.js:9:9)
  at tryCatcher (/Users/master/project/demo/server/node_modules/bluebird/js/release/util.js:16:23)
  at Promise._settlePromiseFromHandler (/Users/master/project/demo/server/node_modules/bluebird/js/release/promise.js:512:31)
  at Promise._settlePromise (/Users/master/project/demo/server/node_modules/bluebird/js/release/promise.js:569:18)
  at Promise._settlePromise0 (/Users/master/project/demo/server/node_modules/bluebird/js/release/promise.js:614:10)
  at Promise._settlePromises (/Users/master/project/demo/server/node_modules/bluebird/js/release/promise.js:694:18)
  at _drainQueueStep (/Users/master/project/demo/server/node_modules/bluebird/js/release/async.js:138:12)
  at _drainQueue (/Users/master/project/demo/server/node_modules/bluebird/js/release/async.js:131:9)
  at Async._drainQueues (/Users/master/project/demo/server/node_modules/bluebird/js/release/async.js:147:5)
  at Immediate.Async.drainQueues [as _onImmediate] (/Users/master/project/demo/server/node_modules/bluebird/js/release/async.js:17:14)
  at processImmediate (timers.js:637:19)
我已经尝试了很多东西,但我不知道如何解决无法设置头发送到客户端后的问题

这是我的密码

/路由器/api.js

/app/controllers/MenuController.js

如何修复控制器?

您在代码中调用res.send两次。一次在api.js中,一次在MenuController.js中。 如果你让MenuController.js成为唯一一个调用res.send的人,你应该会没事的

使用参数调用res.send计算所发送数据的长度,创建HTTP头列表并将其发送到客户端。 然后,再次调用res.send时,响应已经发送,无法再更改


我猜您的客户端现在得到的输出是空的,因为对menuController.list的调用返回未定义。

多亏了您,我向前迈出了一步。我修改了res.send数据以返回数据。服务器上没有错误,但客户端仍然没有结果。相反,<未声明纯文本文档的字符编码。如果文档包含US-ASCII范围之外的字符,则在某些浏览器配置中,文档将呈现乱码文本。文件的字符编码需要在传输协议中声明,或者文件需要使用字节顺序标记作为编码签名。>正在浏览器控制台上输出。最后我得到了我想要的结果!路由器:删除res.send,但删除menuController.listreq,res,控制器:res.senddata;
const app = require('express');
const router = app.Router();

const menuController = require('../app/controllers/MenuController');

router.get('/menu/all', function(req, res, next) {
  res.send(menuController.list(req, res))
});

module.exports = router;
const models = require('../models/Index');

exports.list = (req, res) => {

  const query = 'SELECT * FROM Menus';
  models.sequelize.query(query).then((data) => {
    console.log(data);
    res.send(data);
  });

};