我想用视图引擎和oak呈现一些html页面,但也能将数据发送到postgresql数据库。
首先,在构建代码时,我能够呈现ejs页面。另一方面,我注入了允许将数据发送到数据库的代码,它也起作用了。
但当我想让两者都运行时,它就不起作用了(邮递员上出现404错误(:
这是一个没有查看路线和查看模块的代码,只是用一个路由将数据发送到数据库。post:
server.ts没有查看模块和查看路线(此代码有效(:
import { Application} from "https://deno.land/x/oak/mod.ts";
import { send } from "https://deno.land/x/oak/send.ts";
import {
viewEngine,
engineFactory,
adapterFactory,
} from "https://deno.land/x/view_engine/mod.ts";
import router from './routes.ts';
const ejsEngine = engineFactory.getEjsEngine();
const oakAdapter = adapterFactory.getOakAdapter();
const port = Deno.env.get("PORT") || 5000
const app = new Application();
/*app.use(viewEngine(oakAdapter, ejsEngine));
app.use(async(ctx,next) => {
await send(ctx,ctx.request.url.pathname,{
root: `${Deno.cwd()}`
});
next();
});*/
app.use(router.routes());
app.use(router.allowedMethods());
//deno run --allow-net --allow-read --allow-env server.ts
console.log(`Server running on port ${port}`);
await app.listen({ port: +port })
不带查看模块和查看路线的routes.ts:
import { Router } from "https://deno.land/x/oak/mod.ts";
import {addUser} from './controllers/products.ts';
import {ejsVariables} from './EJS/ejsvariables.js';
//import {showDate} from './EJS/showdate.js';
const router = new Router();
router.post('/OBV/compteclient', addUser);
/*router.get('/OBV/acceuil',(ctx:any)=>{
ctx.render('./OBV/acceuil/OBV.ejs');
});*/
/*router.get('/OBV/compteclient',(ctx:any)=>{
ctx.render('./OBV/compteclient/CompteClient.ejs');
});*/
/*router.get('/OBV/boutique',(ctx:any)=>{
ctx.render('./OBV/boutique/Boutique.ejs',
ejsVariables.dataUser);
})*/
export default router
server.ts代码的注释部分是否存在异步问题?
所以,我发现了问题所在,这是关于server.ts中app.use的顺序,路由器被永远无法到达的等待发送屏蔽了。
app.use(viewEngine(oakAdapter, ejsEngine));
app.use(router.routes());
app.use(router.allowedMethods());
app.use(async(ctx,next) => {
await send(ctx,ctx.request.url.pathname,{
root: `${Deno.cwd()}`
});
next();
});