如何从 html 表单向控制器文件提供数据?

How to give data to the controller file from a html form?

我是 node.js 的新手,在 web 编程,我没有简单的代码给你来测试我的问题,但我认为这个问题可以很简单地解决,我有一个我想将一些信息发送到控制器文件中的视图,这里我将放置视图和其他文件:

对 index.html.js 的看法:

<form action="ongs">
    <label for="fname">First name:</label><br>
    <input type="text" id="fname" name="fname" value="John"><br>
    <label for="lname">Last name:</label><br>
    <input type="text" id="lname" name="lname" value="Doe"><br><br>
    <input type="submit" value="Submit">
</form> 

这里是控制器名字ongs.js

const KoaRouter = require('koa-router');
var Koa = require('koa');
const router = new KoaRouter();

var app = new Koa();

router.get('ongs', '/', async (ctx) => {
  const skelevar = "hi skel";
  console.log('\n------ get ------');
  await ctx.render('ongs/index', { skelevar });
});

router.post('/ongs', (ctx, next) => {
  console.log('\n--fafafa');
  ctx.body = ctx.request.body;
  console.log('\n--isisisisisisisisi');
});

console.log('\n hi guys');
module.exports = router;
app
  .use(router.routes())
  .use(router.allowedMethods());

这是文件 routes.js:

const KoaRouter = require('koa-router');

const hello = require('./routes/hello');
const index = require('./routes/index');
const ongs = require('./routes/ongs');

const router = new KoaRouter();

router.use('/', index.routes());
router.use('/hello', hello.routes());
router.use('/ongs', ongs.routes());

module.exports = router;

我文件夹的组成如下:

红色箭头表示我向您展示的每个文件的深度

这是视图显示的内容:

当我按下提交页面刷新但 router.post 中的任何控制台日志都显示在控制台中。 当我在控制台中按下提交时,我收到的唯一消息如下:

 ------ get ------
      --> GET /ongs?fname=John&lname=Doe 200 18ms 609b
    ℹ 「hot」: WebSocket Client Connected
      <-- GET /assets/app.js
      --> GET /assets/app.js 200 5ms 1.29mb
      <-- GET /assets/logo.png
      --> GET /assets/logo.png 200 3ms 6.77kb
    ℹ 「hot」: WebSocket Client Connected
      <-- GET /ongs?fname=John&lname=Doe
    ------ get ------
      --> GET /ongs?fname=John&lname=Doe 200 18ms 609b
      <-- GET /assets/app.js
      <-- GET /assets/logo.png
      --> GET /assets/app.js 200 5ms 1.29mb
      --> GET /assets/logo.png 200 5ms 6.77kb

表单作为默认的 GET 请求提交,因为您没有在 form 标记中传递 method 属性。如您所见,数据作为 URL 的一部分发送,后端使用 ongs/index 视图进行响应。在表单标签中传递 postmethod 属性,以将表单数据作为 POST 请求提交。

<form action="/ongs" method="post">
 ...
</form> 

还有一个问题。上述请求将失败并返回 404,因为您没有 POST /ongs 的请求处理程序,但您有 POST /ongs/ongs 的请求处理程序。将 POST 端点路由更新为 /.

router.post('/', (ctx, next) => {
  // ...
})