Node.js 如何在nodejs express上使用sequeilize从浏览器返回结果?
我使用console.log检查了查询结果。所以我想在浏览器中看到这个。当我打开控制台时,控制台上出现错误urlhttp://localhost:3000/api/menu/all 通过我的浏览器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',
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);
});
};