ルーティングが失敗した理由をトラッキングする際に問題が発生しました。私はSequelizeとExpressルーティングの新機能です。SequelizeとExpressを使用したAPIルーティングでエラーが発生しました
ゴール - APIエンドポイント '/ v1/agent /:id'にアクセスする際に、SequelizeクエリからJSON応答を返したいとします。私はすでにクエリが動作することを確認し、Agent
モデルにマップされた1つの行を返します。
アプリを起動すると、ノードからRouter.use() requires middleware function but got a ' + gettype(fn));
例外が発生します。例外はinitializeDb関数から来ていますが、理由はわかりません。 /路線から
import http from 'http';
import bodyParser from 'body-parser';
import express from 'express';
import sequelize from 'sequelize';
import config from './config';
import routes from './routes';
let app = express();
app.server = http.createServer(app);
app.use(bodyParser.json({
limit:config.bodyLimit
}));
app.use('/v1', routes);
app.server.listen(config.port);
console.log('API listening on port ' + app.server.address().port);
export default app;
マイindex.jsファイル:
import express from 'express';
import config from '../config';
import initializeDb from '../db';
import agent from '../controller/agent'
// handle db configs
let router = express();
initializeDb(db => {
router.use('/agent', agent({config, db}));
});
export default router;
エージェントモデルのための私のコントローラ:
import sequelize from 'sequelize';
import { Router } from 'express';
import Agent from '../model/agent';
export default({config, db}) => {
let api = Router();
//query for the agent
api.post('/:id', (req, res) => {
sequelize
.query(
"SELECT agentnum AS agentno,fname,lname,agentname AS full_name,[status] FROM my_table WHERE agentnum='" + req.params.id + "'", {model:Agent})
.then(function(agent) {
console.log(agent);
res.json(agent);
});
});
}
、最終的にはここで
は、ルートindex.jsです、モデルagents.jsimport sequelize from '../db';
let agent = function(sequelize, DataTypes) {
sequelize.define('agent', {
agentnum: {
type: DataTypes.STRING,
primaryKey: true,
allowNull: false
},
fname : DataTypes.STRING,
lname : DataTypes.STRING,
fullname : DataTypes.STRING,
status : DataTypes.STRING
}, {
tableName: 'Base',
schema: 'Master',
freezeTableName: true,
timestamps: false
});
};
module.exports = agent;
これで目の2番目の目を入れたい人は誰ですか?
エラーを再現しました。問題はroutes.jsのミドルウェアの呼び出しにあるようです。 index.jsでルートミドルウェアをどのように使用するかを見てみましょう。ソリューションについてはまだ作業中ですが、これは役に立ちますか? –
私は、あなたがセットアップで関数をexcecuteすると、定義されていない、そしてそれがチェーンを壊すという事実と関係があると信じています。ちょっと考えました –
Youre on何か。私の後継クエリは、db.jsから呼び出すと動作しますが、initializeDb(importステートメント)から参照しようとすると失われます –