Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 400错误请求:Node.js Express Ajax_Javascript_Node.js_Ajax_Express_Ejs - Fatal编程技术网

Javascript 400错误请求:Node.js Express Ajax

Javascript 400错误请求:Node.js Express Ajax,javascript,node.js,ajax,express,ejs,Javascript,Node.js,Ajax,Express,Ejs,我不熟悉后端开发和ajax。我正在使用node.js、express和ejs。我试图发布一些数据,并使用ajax返回一个值。我一直收到一个404错误,我不知道为什么。此外,我还使用express generator创建了项目,并安装了body解析器 下面是我的index.ejs文件中的ajax请求。它位于标题中的脚本标记内 function post() { $.ajax({ type: "POST", url: "/test", data

我不熟悉后端开发和ajax。我正在使用node.js、express和ejs。我试图发布一些数据,并使用ajax返回一个值。我一直收到一个404错误,我不知道为什么。此外,我还使用express generator创建了项目,并安装了body解析器

下面是我的index.ejs文件中的ajax请求。它位于标题中的脚本标记内

function post() {
    $.ajax({
        type: "POST",
        url: "/test",
        data: 'TEST',
        contentType: "application/json; charset=utf-8",
        dataType: "json",
    }).done(function (data) {
        console.log("Did it work? "+ data);
    });
}
一旦按下一个按钮,ajax就会执行,我得到一个400错误的请求。我认为这可能与index.js文件中的内容有关。这也可能是express generator创建服务器的方式。再说一次,我是新手,所以这里的任何输入都会很好

index.js:

var express = require('express');
var router = express.Router();
var app = express();
var bodyParser = require('body-parser');
app.use(bodyParser.json()); // support json encoded bodies
app.use(bodyParser.urlencoded({ extended: true })); // support encoded bodies


/* GET home page. */
router.get('/', function(req, res, next) {
  res.render('index');
});
app.post('/test', function(req, res) {
    console.log(req.body);
    res.type('json');
    res.send("hi");
  });
module.exports = router;
可能是因为索引页是使用ejs呈现的吗

提前谢谢


更新:400已修复,现在获得404

400错误是由于我试图发送对象而不是字符串造成的。现在,我得到一个404错误。根据要求,我的文件结构如下

  .
  ├── app.js
  ├── bin
  │   └── www
  ├── package.json
  ├── public
  │   ├── images
  │   ├── javascripts
  │   └── stylesheets
  │       └── style.css
  ├── routes
  │   ├── index.js
  │   └── users.js
  └── views
      ├── error.ejs
      ├── index.ejs
      └── layout.ejs

  7 directories, 9 files

我仍在努力掌握这一点,发电机为我制作了文件。据我所知,bin文件夹中的www文件就是启动脚本。app.js文件将调用其他所有内容。我试图将post方法放在index.js文件中,但我不确定它是否应该放在index.js文件中,或者放在app.js文件中。如果您需要了解任何其他信息,例如其他文件的外观,我很乐意向您展示。

您必须将有效的json字符串传递到数据中,例如

function post() {
    $.ajax({
        type: "POST",
        url: "/test",
        data: JSON.stringify({data: 'TEST'}),
        contentType: "application/json; charset=utf-8",
        dataType: "json",
    }).done(function (data) {
        console.log("Did it work? "+ data);
    });
} 

正如我在下面的回答中提到的,您必须使用有效的json字符串,您可以使用类似
'{“text”:“from front end”}
json.stringify({“text”:“from front end”})的字符串。
感谢您的快速回复!这很有帮助,现在这是一个不错的要求。但是现在我发帖子的时候得到了404?知道为什么会发生这种情况吗?是的,如果您在使用当前文件的地方提供小文件夹和文件结构以及小代码,我们可能会帮助您使用
router.post('/test',function(req,res){
而不是
应用程序
,并且您应该删除第3行到第6行中不相关的代码。希望这对您有所帮助,并且您不能用解决方案更新问题。对此,我恢复了编辑,然后添加了更新,就像我原来应该做的那样。我尝试使用路由器而不是应用程序,但我仍然得到404。您认为呢你还有其他建议吗?